普通索引和切片
像列表一样的索引和切片
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])