数组的广播:
如果两个数组的维数不相同,则元素到元素的操作是不可能的。 然而,在 NumPy 中仍然可以对形状不相似的数组进行操作,因为它拥有广播功能。 较小的数组会广播到较大数组的大小,以便使它们的形状可兼容。广播主要发生在两种情况,一种是两个数组的维数不相等,但是它们的后缘维度的轴长相符,另外一种是有一方的长度为1。
arr=np.array([[1,2,3],[1,2,3]]) arr1=np.array([6,6,6]) print(arr+arr1) arr2=[5] print(arr+arr2)
[[7 8 9]
[7 8 9]]
[[6 7 8]
[6 7 8]]
对切片的修改会作用到原数组上:
arr1=np.arange(10) arr1_slice=arr1[5:8] arr1_slice[1]=12 print(arr1) arr1_slice[:] = 64#给切片中所有元素赋值 print (arr1)
[ 0 1 2 3 4 5 12 7 8 9]
[ 0 1 2 3 4 64 64 64 8 9]
注意:如果你想要得到的是ndarray切片的一份副本而非视图,就需要明确地进行复制操作,例如arr[5:8].copy()
访问二维数组,以下两种方式等价。
可以一次传入多个切片:
arr2D=np.array([[1,2,3],[4,5,6],[7,8,8]]) print(arr2D[:2, 1:])#前两行的第一列到最后一列
[[2 3]
[5 6]]
布尔型索引:
arr=np.arange(10) print(arr[arr>5])
[6 7 8 9]
尔型数组可用于数组索引:
data=np.random.randn(7,3) print(data) print(data[[True,False,True,False,False,False,True]])
[[ 1.33454576 1.61999709 -0.59579306]
[-0.52248732 -0.69191544 -0.93783416]
[-0.50489231 -1.04188384 1.41570801]
[ 0.59800739 -1.21177047 -0.80801409]
[-0.58668617 -1.14608395 1.21260938]
[-0.02062519 0.01987195 -1.34360433]
[ 1.97569796 0.19199827 -0.13092105]]
[[ 1.33454576 1.61999709 -0.59579306]
[-0.50489231 -1.04188384 1.41570801]
[ 1.97569796 0.19199827 -0.13092105]]
花式索引(Fancy indexing)指的是利用整数数组进行索引
花式索引跟切片不一样,它总是将数据复制到新数组中。