参考link https://docs.scipy.org/doc/numpy-dev/user/quickstart.html
基础
Numpy主要用于处理多维数组,数组中元素通常是数字,索引值为自然数
在Numpy中,维度被称为axes,axes的总数为rank (秩)
(关于矩阵秩的概念,可以参考https://www.zhihu.com/question/21605094 与
https://www.applysquare.com/topic-cn/78QfWkiPt/)
Numpy的数组类称为 ndarray,别名array
(numpy.array与 array.array不同,后者只处理一维数组)
ndarray属性
1. ndim
返回数组的秩
2.shape
返回数组各个维度大小
3.size
数组所有元素总个数,与shape结果相等
4.dtype
数组元素类型
5.itemsize
字节表示的元素类型大小,与ndarray.dtype.itemsize相等
int32 -> 4 (32/8) int64 -> 8 (64/8)
6.data
包含数组实际元素的缓存区,通常不使用
举例
1 import numpy as np
2 a=np.arange(15).reshape(3,5)
3 print(a)
4
5 out:
6 array([[ 0, 1, 2, 3, 4],
7 [ 5, 6, 7, 8, 9],
8 [10, 11, 12, 13, 14]])
9
10 print(type(a))
11 print(a.shape)
12 print(a.ndim)
13 print(a.dtype.name)
14 print(a.item.size)
15
16 out:
17 numpy.ndarray
18 (3,5)
19 2
20 'int32'
21 4
创建数组
1 #将列表转换为array
2 >>> import numpy as np
3 >>> a = np.array([2,3,4])
4 >>> a
5 array([2, 3, 4])
6 >>> a.dtype
7 dtype('int32')
8 >>> b = np.array([1.2, 3.5, 5.1])
9 >>> b.dtype
10 dtype('float64')
11
12 #创建二维数组array
13 >>> b = np.array([(1.5,2,3), (4,5,6)])
14 >>> b
15 array([[ 1.5, 2. , 3. ],
16 [ 4. , 5. , 6. ]])
17
18 #创建一维数组
19 >>> np.arange( 10, 30, 5 )
20 array([10, 15, 20, 25])
21 >>> np.arange( 0, 2, 0.3 )
22 array([ 0. , 0.3, 0.6, 0.9, 1.2, 1.5, 1.8])
23
24 #使用linespace创建数组
25 >>> from numpy import pi
26 >>> np.linspace( 0, 2, 9 )
27 array([ 0. , 0.25, 0.5 , 0.75, 1. , 1.25, 1.5 , 1.75, 2. ])
28 >>> x = np.linspace( 0, 2*pi, 100 )
29 >>> f = np.sin(x)
1 >>> b = np.arange(12).reshape(3,4)
2 >>> b
3 array([[ 0, 1, 2, 3],
4 [ 4, 5, 6, 7],
5 [ 8, 9, 10, 11]])
6 >>>
7 >>> b.sum(axis=0) # 按列求和
8 array([12, 15, 18, 21])
9 >>> b.sum(axis=1) # 按行求和
10 array([ 6, 22, 38])
11 >>> b.min(axis=1) # 每行最小值
12 array([0, 4, 8])
13 >>> b.cumsum(axis=1) # 按列累积求和
14 array([[ 0, 1, 3, 6],
15 [ 4, 9, 15, 22],
16 [ 8, 17, 27, 38]])
1 # 常用函数
2 >>> B = np.arange(3)
3 >>> B
4 array([0, 1, 2])
5 >>> np.exp(B)
6 array([ 1. , 2.71828183, 7.3890561 ])
7 >>> np.sqrt(B)
8 array([ 0. , 1. , 1.41421356])
9 >>> C = np.array([2., -1., 4.])
10 >>> np.add(B, C)
11 array([ 2., 0., 6.])
1 # 索引、切片、迭代 2 # 一维数组 3 >>a=np.arange(10)**3 4 >>print(a) 5 array([ 0, 1, 8, 27, 64, 125, 216, 343, 512, 729], dtype=int32) 6 >>a[2] 7 8 8 >>a[2:5] 9 array([ 8, 27, 64], dtype=int32) 10 >>a[:6:2]=-100 11 >>a 12 array([-10, 1, -10, 27, -10, 125, 216, 343, 512, 729], dtype=int32) 13 >>a[::-1] 14 array([729, 512, 343, 216, 125, -10, 27, -10, 1, -10], dtype=int32) 15 16 #多维数组 17 >>> def f(x,y): 18 ... return 10*x+y 19 ... 20 >>> b = np.fromfunction(f,(5,4),dtype=int) 21 >>> b 22 array([[ 0, 1, 2, 3], 23 [10, 11, 12, 13], 24 [20, 21, 22, 23], 25 [30, 31, 32, 33], 26 [40, 41, 42, 43]]) 27 >>> b[2,3] 28 23 29 >>> b[0:5, 1] #第二列 30 array([ 1, 11, 21, 31, 41]) 31 >>> b[ : ,1] #第二列 32 array([ 1, 11, 21, 31, 41]) 33 >>> b[1:3, : ] #第二行、第三行 34 array([[10, 11, 12, 13], 35 [20, 21, 22, 23]]) 36 >>b[-1] #相当于 b[-1,:],最后一行 37 array([40, 41, 42, 43])