(二)初识NumPy库(数组的操作和运算)
本章主要介绍的是ndarray数组的操作和运算!
一、 ndarray数组的操作:
操作是指对数组的索引和切片。索引是指获取数组中特定位置元素的过程;切片是指获取数组中元素子集的过程。
1、一维数组的索引和切片与python的列表类似:
索引:
import numpy as np a = np.array([9, 8, 7, 6, 5]) print(a[2]) 7
切片:起始编号:终止编号:(不含):步长 三元素用冒号分割
import numpy as np a = np.array([9, 8, 7, 6, 5]) print(a[1:4:2]) [8 6]
2、多维数组的索引和切片:
索引:
import numpy as np a = np.arange(24).reshape((2, 3, 4)) print(a) print(a[1, 2, 3]) print(a[0, 1, 2]) print(a[-1, -2, -3]) [[[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] [[12 13 14 15] [16 17 18 19] [20 21 22 23]]] 23 6 17
切片:选取一个维度用:
import numpy as np a = np.arange(24).reshape((2, 3, 4)) print(a) print(a[:, 1, -3]) print(a[:, 1:3, :]) print(a[:, :, ::2]) [[[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] [[12 13 14 15] [16 17 18 19] [20 21 22 23]]] [ 5 17] [[[ 4 5 6 7] [ 8 9 10 11]] [[16 17 18 19] [20 21 22 23]]] [[[ 0 2] [ 4 6] [ 8 10]]
二、ndarray数组的运算:
1、数组与标量之间的运算作用于数组的每一个元素:
import numpy as np a = np.arange(24).reshape((2, 3, 4)) print(a) print(a.mean()) print(a / a.mean()) [[[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] [[12 13 14 15] [16 17 18 19] [20 21 22 23]]] 11.5 [[[0. 0.08695652 0.17391304 0.26086957] [0.34782609 0.43478261 0.52173913 0.60869565] [0.69565217 0.7826087 0.86956522 0.95652174]] [[1.04347826 1.13043478 1.2173913 1.30434783] [1.39130435 1.47826087 1.56521739 1.65217391] [1.73913043 1.82608696 1.91304348 2. ]]]
2、Numpy的一元函数:
对ndarray中的数据执行元素级运算的函数:
np.abs(x) np.fabs(x) | 计算数组各元素的绝对值 |
np.sqrt(x) | 计算数组各元素的平方根 |
np.square(x) | 计算数组各元素的平方 |
np.log(x) np.log10(x) np.log2(x) | 计算数组各元素的自然对数、10底对数和2底对数 |
np.ceil(x) np.floor(x) | 计算数组各元素的ceiling和floor值(ceiling是不超过这个元素的整数值,floor是小于这个元素的最大整数值) |
np.rint(x) | 计算数组各元素的四舍五入值 |
np.modf(x) | 将数组各元素的小数和整数部分以两个独立数组形式返回 |
np.cos(x) np.cosh(x) np.sin(x) np.sinh(x) np.tan(x) np.tanh(x) | 计算数组各元素的普通型和双曲线的三角函数 |
np.exp(x) | 计算数组各元素的指数值 |
np.sign(x) | 计算数组各元素的符号值,1(+),0,-1(-) |
import numpy as np a = np.arange(24).reshape((2, 3, 4)) print(np.square(a)) a = np.sqrt(a) print(a) print(np.modf(a)) [[[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] [[12 13 14 15] [16 17 18 19] [20 21 22 23]]] 11.5 [[[0. 0.08695652 0.17391304 0.26086957] [0.34782609 0.43478261 0.52173913 0.60869565] [0.69565217 0.7826087 0.86956522 0.95652174]] [[1.04347826 1.13043478 1.2173913 1.30434783] [1.39130435 1.47826087 1.56521739 1.65217391] [1.73913043 1.82608696 1.91304348 2. ]]] [[[ 0 1 4 9] [ 16 25 36 49] [ 64 81 100 121]] [[144 169 196 225] [256 289 324 361] [400 441 484 529]]] [[[0. 1. 1.41421356 1.73205081] [2. 2.23606798 2.44948974 2.64575131] [2.82842712 3. 3.16227766 3.31662479]] [[3.46410162 3.60555128 3.74165739 3.87298335] [4. 4.12310563 4.24264069 4.35889894] [4.47213595 4.58257569 4.69041576 4.79583152]]] (array([[[0. , 0. , 0.41421356, 0.73205081], [0. , 0.23606798, 0.44948974, 0.64575131], [0.82842712, 0. , 0.16227766, 0.31662479]], [[0.46410162, 0.60555128, 0.74165739, 0.87298335], [0. , 0.12310563, 0.24264069, 0.35889894], [0.47213595, 0.58257569, 0.69041576, 0.79583152]]]), array([[[0., 1., 1., 1.], [2., 2., 2., 2.], [2., 3., 3., 3.]], [[3., 3., 3., 3.], [4., 4., 4., 4.], [4., 4., 4., 4.]]]))
3、Numpy的二元函数:
+-*/ | 两个数组各元素进行对应运算 |
np.maximum(x,y) np.fmax() np.minimum(x,y) np.fmin() | 元素级的最大值/最小值计算 |
np.mod(x,y) | 元素级的模运算 |
np.copysign(x,y) | 将数组y中各元素值的符号赋值给数组x对应元素 |
><>=<===!= | 算术比较,产生布尔型数组 |
import numpy as np a = np.arange(24).reshape((2, 3, 4)) b = np.sqrt(a) print(np.maximum(a, b)) print(a > b) [[[ 0. 1. 2. 3.] [ 4. 5. 6. 7.] [ 8. 9. 10. 11.]] [[12. 13. 14. 15.] [16. 17. 18. 19.] [20. 21. 22. 23.]]] [[[False False True True] [ True True True True] [ True True True True]] [[ True True True True] [ True True True True] [ True True True True]]]