整数索引一般形式:arr[frist_dim_index,second_dim_index,...,nth_dim_index]x=np.array([1,2,3,4,5,6,7,8])print(x[2])#3y=np.array([[11,12,13,14,15],[16,17,18,19,20],[21,22,23,24,25],[26,27,28,29,30],[31,32,33,34,35]])打印(x[2])#[2122232425]#x[2]==x[2,:]print(x[2,1])#22#x[2,1]==x[2][1]切片索引一般形式:arr[frist_dim_slice,second_dim_slice,...,nth_dim_slice]DotsindexNumPy允许使用...表示足够的冒号来构建完整的索引列表。x[1,2,...]等于x[1,2,:,:,:]x[...,3]等于x[:,:,:,:,3]x[4,...,5,:]等于x[4,:,:,5,:]整数数组索引一般形式:arr[frist_dim,second_dim,...,nth_dim]一维数组,一-维度索引:x=np.array([1,2,3,4,5,6,7,8])r=[0,1,2]print(x[r])#[123]二-dimensional(多维)数组,一维索引:x=np.array([[11,12,13,14,15],[16,17,18,19,20],[21,22,23,24,25],[26,27,28,29,30],[31,32,33,34,35]])r=[0,1,2]print(x[r])#[[1112131415]#[1617181920]#[2122232425]]#x[r]表示除了第0维,其他维度省略,相当于:[(0,:),(1,:),(2,:)]r=[0,1,2]c=[2,3,4]y=x[r,c]print(y)#[131925]#x[r,c]所有维度都不省略,意思是找得到[(0,2),(1,3),(2,4)]的元素。一维数组,多维索引:x=np.array([1,2,3,4,5,6,7,8])r=np.array([[0,1],[3,4]])print(x[r])#[[12]#[45]]#x[r],只对第0维进行操作,求第0维的索引,(0,1)组,A组(3,4)构成多维数组多维数组,多维索引:x=np.array([[11,12,13,14,15],[16,17,18,19,20],[21,22,23,24,25],[26,27,28,29,30],[31,32,33,34,35]])r=np.array([[0,1],[3,4]])打印(x[r])#[[[1112131415]#[1617181920]]##[[2627282930]#[3132333435]]]#x[r],只对第零维进行运算,求出第零维的索引,一组(0,1)和一组(3,4)组成多维数组#等价于[[(0,:),(1,:)][(3,:),(4,:)]]r=np.array([[0,0],[4,4]])c=np.array([[0,4],[0,4]])y=x[r,c]print(y)#[[1115]#[3135]]#得到[[(0,0),[(4,0),(4,4)]]的(0,4)]元素r=np.array([0,0])c=np.array([[0,4],[0,4]])y=x[r,c]print(y)#[[11,15],#[11,15]]#get[[(0,0),(0,4)][(0,0),(0,4)]]elements#等价于r=np.array([[0,0],[0,0]])广播机制slice+indexx=np.array([[11,12,13,14,15],[16,17,18,19,20],[21,22,23,24,25]],[26,27,28,29,30],[31,32,33,34,35]])y=x[0:3,[1,2,2]]print(y)#[[121313]#[171818]#[222323]]#第零维:(0:3)取走,第一维从中取出[1,2,2]元素np.take()指定坐标轴提取元素x=np.array([[11,12,13,14,15],[16,17,18,19,20],[21,22,23,24,25],[26,27,28,29,30],[31,32,33,34,35]])r=[0,1,2]print(np.take(x,r,axis=0))#[[1112131415]#[1617181920]#[2122232425]]print(np.take(x,r,axis=1))#[[111213]#[161718]#[212223]#[262728]#[313233]]sliceindex和integerindex的区别sliceindex生成的arrayview永远是原数组的子数组;但是整数索引生成的数组不是它的子数组,而是新数组#sliceindexa=np.array([[1,2],[3,4],[5,6]])b=a[0:1,0:1]b[0,0]=2print(a[0,0]==b)#[[True]]#整数索引a=np.array([[1,2],[3,4],[5,6]])b=a[0,0]b=2print(a[0,0]==b)#假优雅数组迭代apply_along_axis(func1d,axis,arr)x=np.array([[11,12,13,14,15],[16,17,18,19,20],[21,22,23,24,25],[26,27,28,29,30],[31,32,33,34,35]])y=np.apply_along_axis(np.sum,0,x)print(y)#[105110115120125]y=np.apply_along_axis(np.sum,1,x)print(y)#[6590115140165]这个地方很容易反转,二维数据有两个轴:第0轴沿行垂直向下,第1轴沿列水平向下对于例如,当axis=0时,垂直方向的数据被顺序操作;当axis=1时,对水平方向的数据进行顺序操作。
