版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_38125866/article/details/82669049
基本操作
- 数组上运算符应用于元素。
In [58]: a = np.array([2,3,4,5])
In [59]: b = np.arange(4)
In [60]: b
Out[60]: array([0, 1, 2, 3])
In [61]: c = a - b
In [62]: c
Out[62]: array([2, 2, 2, 2])
In [63]: b**2
Out[63]: array([0, 1, 4, 9])
In [64]: 10*np.sin(a)
Out[64]: array([ 9.09297427, 1.41120008, -7.56802495, -9.58924275])
- 矩阵乘积可以用@符号或dot函数或方法操作
In [65]: A = np.array([[1,1]])
In [66]: A = np.array([[1,1],[0,1]])
In [67]: B = np.array([[2,0],[3,4]])
In [68]: A * B
Out[68]:
array([[2, 0],
[0, 4]])
In [69]: A @ B
Out[69]:
array([[5, 4],
[3, 4]])
In [70]: A.dot(B)
Out[70]:
array([[5, 4],
[3, 4]])
- 某些操作(例如+=和)*=可以修改现有阵列而不是创建新阵列。
In [71]: a = np.ones((2,3),dtype=int)
In [72]: b = np.random.random((2,3))
In [73]: a *= 3
In [74]: a
Out[74]:
array([[3, 3, 3],
[3, 3, 3]])
In [75]: b += a
In [76]: b
Out[76]:
array([[3.88142533, 3.59120789, 3.41290999],
[3.99371345, 3.62288708, 3.99741427]])
- 当使用不同类型的数组进行操作时,结果数组的类型向上转换。
In [77]: a = np.ones(3,dtype=np.int32)
In [78]: b = np.linspace(0,pi,3)
In [79]: b.dtype.name
Out[79]: 'float64'
- 许多一元操作,例如计算数组中所有元素的总和,都是作为ndarray类的方法实现的。
In [84]: a = np.random.random((2,3))
In [85]: a.sum()
Out[85]: 3.0263118597596907
In [86]: a.min()
Out[86]: 0.2019686910271471
In [87]: a.max()
Out[87]: 0.9452686756945003
##通过指定axis 参数,可以沿数组的指定轴应用操作:
In [88]: a.min(axis=1)
Out[88]: array([0.33502604, 0.20196869])
In [89]: a.min(axis=0)
Out[89]: array([0.20196869, 0.23183276, 0.38940528])
- NumPy提供熟悉的数学函数,例如sin,cos和exp。在NumPy中,这些被称为“通用函数”(ufunc)
In [90]: B = np.arange(3)
In [91]: B
Out[91]: array([0, 1, 2])
In [92]: np.exp(B)
Out[92]: array([1. , 2.71828183, 7.3890561 ])
In [93]: np.sqrt(B)
Out[93]: array([0. , 1. , 1.41421356])
In [94]: np.add(B,[1,2,3])
Out[94]: array([1, 3, 5])
切片迭代索引
- 一维数组可以被索引,切片和迭代,就像 列表 和其他Python序列一样,不做阐述。
- 多维数组每个轴可以有一个索引。这些索引以逗号分隔的元组给出:
In [96]: def f(x,y):
...: return 10*x+y
...:
...:
In [97]: b = np.fromfunction(f,(5,4),dtype=int)
In [98]: b
Out[98]:
array([[ 0, 1, 2, 3],
[10, 11, 12, 13],
[20, 21, 22, 23],
[30, 31, 32, 33],
[40, 41, 42, 43]])
In [99]: b[2,3]
Out[99]: 23
In [100]: b[0:5,1]
Out[100]: array([ 1, 11, 21, 31, 41])
In [101]: b[:,1]
Out[101]: array([ 1, 11, 21, 31, 41])
In [102]: b[1:3,1]
Out[102]: array([11, 21])
#对多维数组进行迭代是针对第一个轴完成的:
In [105]: b = np.arange(30).reshape(5,6)
In [106]: b
Out[106]:
array([[ 0, 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10, 11],
[12, 13, 14, 15, 16, 17],
[18, 19, 20, 21, 22, 23],
[24, 25, 26, 27, 28, 29]])
In [107]: for row in b:
...: print(row)
...:
[0 1 2 3 4 5]
[ 6 7 8 9 10 11]
[12 13 14 15 16 17]
[18 19 20 21 22 23]
[24 25 26 27 28 29]
#如果想要对数组中的每个元素执行操作,可以使用flat属性 作为数组的所有元素的 迭代器:
In [108]: for element in b.flat:
...: print(element)
...:
0
1
2
3
4
....