普通索引和切片
像列表一樣的索引和切片
a=np.arange(15).reshape(3,5)
a
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14]])
a[1][1]
6
a[[1,2]] #列表是不允許這樣切的
array([[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14]])
數組特有索引和切片方式
因爲數組對象比較工整,所以可以採用數組特有的索引和切片。
a[[0,1]] #相當於a[[0,1],:],即:0,1行的所有列
array([[0, 1, 2, 3, 4],
[5, 6, 7, 8, 9]])
a[[0,1],[0,1]] #返回的結果爲[0,6],這個結果可能不是你想要的。
#這個的意思是返回一個一維數組,這個一維數組包含兩個數字。
#這兩個數字對應的原行索引是0,1,對應的原列索引是0,1
#這個方法不能截取第0,1行0,1列對應的4個數字。
array([0, 6])
a[0:2,2:5]
array([[2, 3, 4],
[7, 8, 9]])
a[[0,1],0:2] #用列表表示行號,用:表示列號
array([[0, 1],
[5, 6]])
a[0:2,[0,1]]#結果等同於a[[0,1],0:2]
a[[0,2]][:,[1,2,3]]#選取任意不連續的行和列的切片方式:0,2行的1,2,3列
array([[ 1, 2, 3],
[11, 12, 13]])
布爾索引
a=np.array(["a","b","a","b"])
a
array(['a', 'b', 'a', 'b'], dtype='<U1')
a=="a" #會返回一個布爾數組,它的長度和a數組0維上的長度一樣。
array([ True, False, True, False])
b=np.random.randint(1,10,(4,3))
b
array([[9, 3, 1],
[6, 4, 4],
[7, 6, 6],
[5, 2, 5]])
進行布爾索引的時候,布爾值數組的長度必須和數組軸索引長度一致。
b[:,0]>3
array([ True, True, True, True])