numpy
(附件为代码运行信息)
1、轴与长度
In [5]:
import numpy as np vector = np.array([1,2,3]) #向量 matrix = np.array([[1,2,3],[4,5,6]]) #矩阵 tensor = np.array([[[1,2,3],[4,5,6]],[[1,2,3],[4,5,6]]]) print(vector) print('-'*10) print(matrix) print('-'*10) print(tensor)
[1 2 3] ---------- [[1 2 3] [4 5 6]] ---------- [[[1 2 3] [4 5 6]] [[1 2 3] [4 5 6]]]
In [6]:
#.ndim (维度) print(vector.ndim) print('-'*10) print(matrix.ndim) print('-'*10) print(tensor.ndim)
1 ---------- 2 ---------- 3
In [7]:
#shape print(vector.shape) print('-'*10) print(matrix.shape) print('-'*10) print(tensor.shape) #两层,二行,三列
(3,) ---------- (2, 3) ---------- (2, 2, 3)
In [8]:
#dtype print(vector.dtype) print('-'*10) print(matrix.dtype) print('-'*10) print(tensor.dtype)
int32 ---------- int32 ---------- int32
In [9]:
#size 数据量信息(各个轴的乘积) print(vector.size) print('-'*10) print(matrix.size) print('-'*10) print(tensor.size)
3 ---------- 6 ---------- 12
2、创建多维数组
In [13]:
a = np.array( [1,2,3]) b = np.array([1,2,3],dtype = np.float_) print(a,a.dtype) print('-'*10) print(b,b.dtype)
[1 2 3] int32 ---------- [1. 2. 3.] float64
In [15]:
#np.zeros() 根据数组形状创建全为0的数组 a = np.zeros((2,3)) b = np.zeros((2,3), dtype = np.int_) print(a,a.dtype) print('-'*10) print(b,b.dtype)
[[0. 0. 0.] [0. 0. 0.]] float64 ---------- [[0 0 0] [0 0 0]] int32
In [17]:
#np.arange() 根据起点、终点和步长创建 a = np.arange(5) b = np.arange(3,5) c = np.arange(3,5,0.5) d = np.arange(3,5,0.5,dtype = np.float32) print(a,a.dtype) print('-'*10) print(b,b.dtype) print('-'*10) print(c,c.dtype) print('-'*10) print(d,d.dtype)
[0 1 2 3 4] int32 ---------- [3 4] int32 ---------- [3. 3.5 4. 4.5] float64 ---------- [3. 3.5 4. 4.5] float32
In [18]:
#np.linspace() 根据起点、终点和元素数量创建 a = np.linspace(3,5,4) b = np.linspace(3,5,4,dtype=np.float32) print(a,a.dtype) print('-'*10) print(b,b.dtype)
[3. 3.66666667 4.33333333 5. ] float64 ---------- [3. 3.6666667 4.3333335 5. ] float32
3、数组间运算和广播运算
In [20]:
#相同shape的数组进行运算 a = np.array([1,2,3]) b = np.array([4,5,6]) print(a-b) print('-'*10) print(a*b)
[-3 -3 -3] ---------- [ 4 10 18]
In [21]:
#广播运算 #多维数组与标量 a = np.array([1,2,3]) print(a*10)
[10 20 30]
In [22]:
#一维数组与二维数组运算,其中一维数组的长度和二维数组的第二个维度长度一致 #一维数组看作行向量,行向量进行复制,与二维数组的类型相同,然后进行运算 a = np.array([1,2,3]) b = np.array([[1,2,3] ,[2,3,4]]) print(a.shape) print(b.shape) c = a+b print(c) print(c.shape)
(3,) (2, 3) [[2 4 6] [3 5 7]] (2, 3)
In [24]:
#对于两个维度相同的多维数组之间的运算,Numpy会将长度为1的维度进行复制,实现相同长度后进行逐元素运算 a = np.array([[1,2,3]]) b = np.array([[1,2,3], [4,5,6], [7,8,9], [10,11,23]]) print(a.shape) print(b.shape) print(a+b)
(1, 3) (4, 3) [[ 2 4 6] [ 5 7 9] [ 8 10 12] [11 13 26]]
In [25]:
#判断 数值 print(b>4)
[[False False False] [False True True] [ True True True] [ True True True]]
In [28]:
print((b>4) & (b<10)) print('-'*10) print((b>4) | (b<10))
[[False False False] [False True True] [ True True True] [False False False]] ---------- [[ True True True] [ True True True] [ True True True] [ True True True]]
In [4]:
#多维数组的索引与切片 import numpy as np a = np.array([[1,2,3], [4,5,6], [7,8,9]]) print(a[0]) #第1行 print('-'*10) print(a[:2]) #第1,2行 print('-'*10) print(a[:,0]) #第一列 print('-'*10) print(a[:2,:2]) print('-'*10) print(a[::2,::2])
[1 2 3] ---------- [[1 2 3] [4 5 6]] ---------- [1 4 7] ---------- [[1 2] [4 5]] ---------- [[1 3] [7 9]]
In [5]:
a = np.array([[1,2,3], [4,5,6], [7,8,9]]) b = a[1,1] print(b)
5
In [9]:
#位置索引赋值 a = np.array([[1,2,3], [4,5,6], [7,8,9]]) a[1,1] = 0 print(a)
[[1 2 3] [4 0 6] [7 8 9]]
In [10]:
a = np.array([[1,2,3], [4,5,6], [7,8,9]]) a[::2,:] = 0 print(a)
[[0 0 0] [4 5 6] [0 0 0]]
In [11]:
#将所有元素修改为特定的值 a[:] = 0 print(a)
[[0 0 0] [0 0 0] [0 0 0]]
4、高级索引
In [14]:
#逻辑索引 a = np.array([[1,2,3], [4,5,6], [7,8,9]]) print(a[a>4]) print(a[(a>4) & (a<8)])
[5 6 7 8 9] [5 6 7]
5、多维数组对象的方法
In [15]:
#reshape a = np.array([1,2,3,4,5,6]) print(a) print(a.shape) print(a.reshape(2,3)) print(a.reshape(6,1))
[1 2 3 4 5 6] (6,) [[1 2 3] [4 5 6]] [[1] [2] [3] [4] [5] [6]]
In [18]:
#reshape()中,有一个值 -1 只能用一次,表面这个维度的长度通过其他维度的长度自动计算 print(a.reshape(2,-1)) print(a.reshape(3,-1)) #-1也可将多维数组转为一维数组 print(a.reshape(-1))
[[1 2 3] [4 5 6]] [[1 2] [3 4] [5 6]] [1 2 3 4 5 6]
In [24]:
#transpose() a = np.array([[1,2], [4,5], [7,8]]) print(a.transpose()) a = np.zeros((10,12,15)) print(a.shape) b = a.transpose(2,0,1) print(b.shape)
[[1 4 7] [2 5 8]] (10, 12, 15) (15, 10, 12)
In [30]:
#mean() a = np.array([[1,2,3], [4,5,6], [7,8,9]]) print(a.mean()) print(a.mean(axis=(0,1))) print(a.mean(axis = 0)) print(a.mean(axis = 1))
5.0 5.0 [4. 5. 6.] [2. 5. 8.]
In [32]:
#sum() a = np.array([[1,2,3], [4,5,6], [7,8,9]]) print(a.sum()) print(a.sum(axis=(0,1))) print(a.sum(axis=0)) print(a.sum(axis = 1))
45 45 [12 15 18] [ 6 15 24]
In [33]:
#std() a = np.array([[1,2,3], [4,5,6], [7,8,9]]) print(a.std()) print(a.std(axis=(0,1))) print(a.std(axis=0)) print(a.std(axis = 1))
2.581988897471611 2.581988897471611 [2.44948974 2.44948974 2.44948974] [0.81649658 0.81649658 0.81649658]
In [34]:
#max() min() a = np.array([[1,2,3], [4,5,6], [7,8,9]]) print(a.max()) print(a.max(axis=(0,1))) print(a.min(axis=0)) print(a.min(axis = 1))
9 9 [1 2 3] [1 4 7]
In [38]:
#round() 四舍五入五成双 a = np.array([[1.1,2.3,3.4], [2.8,9.1,9.1]]) print(a) print(a.round()) print(a.round(0)) #可选小数位数的参数
[[1.1 2.3 3.4] [2.8 9.1 9.1]] [[1. 2. 3.] [3. 9. 9.]] [[1. 2. 3.] [3. 9. 9.]]
In [40]:
#dot() 矩阵乘法 a = np.array([[2,3,4], [3,4,5]]) b = np.array([[1,2], [4,4], [9,7]]) print('a.shape = ',a.shape) print('b.shape = ',b.shape) c = a.dot(b) print(c)
a.shape = (2, 3) b.shape = (3, 2) [[50 44] [64 57]]
In [48]:
a = np.linspace(0,4,6) b = np.linspace(3,5,6) print('a.shape = ',a.shape) print('b.shape = ',b.shape) c=a.dot(b) print(c)
a.shape = (6,) b.shape = (6,) 53.6
In [50]:
a = np.linspace(0,4,6) print(a.dtype) b = a.astype(np.float32) print(b.dtype)
float64 float32
6、Numpy常用函数
In [55]:
print(np.e) print(np.inf) print(np.NINF) print(np.pi) print(np.nan)
2.718281828459045 inf -inf 3.141592653589793 nan
In [ ]: