numpy
1. numpy属性
- 判断矩阵维度:
array.ndim
- 判断矩阵形状:
array.shape
- 判断矩阵元素个数:
array.size
#导入numpy import numpy as np #创建矩阵 array = np.array([[1,2,3], [3,4,5], [2,3,4] ]) print(array) 输出: [[1 2 3] [3 4 5] [2 3 4]] # 几维数组 print('number of dim',array.ndim) # number of dim 2 # 形状,几行几列数组 print('shape',array.shape) # shape (3, 3) # size,一共有一个元素 print('size',array.size) # size 9
2. 创建array
- 创建一维序列:
a = np.array([1,2,3,4])
- 创建二位矩阵:
a = np.array([[1,2,3], [2,3,4]])
- 创建随机矩阵:
a = np.random.random((3,4))
——(3,4)表示3行4列矩阵 - 创建一个全部为0 的矩阵:
a = np.zeros((3,4),dtype = np.int32)
——(3,4)表示3行4列矩阵;dtype设置类型 - 创建一个全部为 1 的矩阵:
a = np.ones((3,4),dtype = np.int16)
- 创建一个全部为 empty 的矩阵:
a = np.empty((3,4))
- 生成一个有序序列:
a = np.arange(12).reshape((3,4))
——arange(12)表示0-11的数字,reshape()括号里填写几行几列 - 数据区间被分成线段:
a = np.linspace(1,10,6).reshape(2,3)
——1-10的序列,被分为6段,reshape()定义几行几列
import numpy as np # 1. 创建一维序列 a = np.array([1,2,3,4],dtype = np.int64) #dtype 用于查看类型,默认int32, print(a, a.dtype) # 输出:[1 2 3 4] int64 print(a.shape) # 输出:(4,) ——表示序列,不是矩阵 # 2. 创建二维矩阵 a = np.array([[1,2,3], [2,3,4]]) print(a) 输出: [[1 2 3] [2 3 4]] # 3. 创建一个随机生成的矩阵 a = np.random.random((3,4)) #括号内指定行列数即可 print(a) 输出: [[0.96913245 0.42265093 0.62387946 0.83842189] [0.00910311 0.31142922 0.74050868 0.67094311] [0.79450196 0.63776097 0.3371271 0.16052966]] # 4. 创建一个全部为0 的矩阵 a = np.zeros((3,4),dtype = np.int32) # 括号里输入几行几列 print(a) 输出: [[0 0 0 0] [0 0 0 0] [0 0 0 0]] # 5. 创建一个全部为 1 的矩阵 a = np.ones((3,4),dtype = np.int16) # 括号里输入几行几列 print(a) 输出: [[1 1 1 1] [1 1 1 1] [1 1 1 1]] # 6. 创建一个全部为 empty 的矩阵 a = np.empty((3,4)) # 括号里输入几行几列,类型为float print(a) 输出: [[0. 0. 0. 0.] [0. 0. 0. 0.] [0. 0. 0. 0.]] # 7. 生成一个有序序列 a = np.arange(12).reshape((3,4)) #reshape() 确定几行几列 print(a) 输出: [[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] # 8. 一个数据区间被分成线段 a = np.linspace(1,10,6).reshape(2,3) #1-10的序列,被分为5段,reshape()定义几行几列 print(a,a.dtype) 输出: [[ 1. 2.8 4.6] [ 6.4 8.2 10. ]] float64
3. numpy基础运算
3.1 一维序列运算
- 加法:c=a+b
- 减法:c=a-b
- 乘法:c=a**b(平方)
# 定义2个一维序列 a = np.array([10,20,30,40]) b = np.arange(4) print(a) print(b) 输出: [10 20 30 40] [0 1 2 3] # 1. 减法 c= a-b print(c) 输出:[10 19 28 37] # 2. 加法 d = a+b print(d) 输出:[10 21 32 43] # 3. 乘法 e = b**2 # **代表平方 f =10*np.sin(a) # 调用numpy中sin函数 g = a*b # 对应相乘 print(e) print(f) print(g) 输出: [0 1 4 9] [-5.44021111 9.12945251 -9.88031624 7.4511316 ] [ 0 20 60 120] # 4. 判断矩阵中元素的大小 print(b) print(b<3) # 矩阵b中元素是否小于3 print(b==3) # 矩阵b中元素是否小于3 输出: [0 1 2 3] [ True True True False] [False False False True]
3.2 二维矩阵运算
- 矩阵乘法:
①c = a*b
;逐个相乘,要求矩阵维度必须相同,2行2列与3行2列无法相乘
②c_dot = np.dot(a,b)
或c_dot = a.dot(b)
;矩阵a与矩阵b相乘
# 定义两个矩阵 a = np.array([ [0,1], [2,1] ]) b = np.arange(4).reshape((2,2)) print(a) print(b) 输出: [[0 1] [2 1]] [[0 1] [2 3]] # 1. 矩阵乘法 c = a*b #对应位置相乘 要求矩阵维度必须相同,2行2列与3行2列无法相乘 print(c) 输出: [[0 1] [4 3]] #矩阵相乘 - 1 c_dot = np.dot(a,b) #表达方式1 print(c_dot) 输出: [[2 3] [2 5]] #矩阵相乘 - 2 c_dot_2 = a.dot(b) # 表达方式2 print(c_dot_2) 输出: [[2 3] [2 5]]
- 矩阵求和、求最大值、最小值
①求和:np.sum()
②最大值:np.max()
③最小值:np.min()
3、求每行或者每列中的sum、最大、最小值
指定行或列用axis,axis = 1,对行操作;axis = 0,对列操作;
①矩阵中每行元素求和:np.sum(a,axis=1)
②矩阵中每列元素求最大值:np.max(a,axis = 0
③矩阵中每行元素求最小值:np.min(a,axis = 1)
# 创建一个随机生成的矩阵 a = np.random.random((2,4)) #括号内指定行列数即可 # 1. 求和、最大值、最小值 print(a) 输出: [[0.40596249 0.55513475 0.6697611 0.27219617] [0.21702995 0.78822072 0.74077249 0.45906168]] print(np.sum(a)) #矩阵中所有元素求和 print(np.max(a)) #矩阵中所有元素的最大值 print(np.min(a)) #矩阵中所有元素的最小值 输出: 4.108139341201598 0.7882207190918352 0.2170299493607155 # 2. 求每行或者每列中的sum、最大、最小值 #定义axis,axis = 0,按照行求;axis = 0,按照列求 print(a) 输出: [[0.40596249 0.55513475 0.6697611 0.27219617] [0.21702995 0.78822072 0.74077249 0.45906168]] print(np.sum(a,axis = 1)) #矩阵中每行元素求和 print(np.max(a,axis = 0)) #矩阵中每列的最大值 print(np.min(a,axis = 1)) #矩阵中每行的最小值 输出: [1.90305451 2.20508483] [0.40596249 0.78822072 0.74077249 0.45906168] [0.27219617 0.21702995]
- 求矩阵中元素的最大数最小数对应索引:
①最小值对应索引:np.argmin(A)
②最大值对应索引:np.argmax(A)
- 求所有元素的平均值:
①方法一:np.mean(A)
②方法二:A.mean()
③方法三:np.average(A)
- 求每行或者每列的平均值:
np.mean(A,axis = 0 / 1)
;
axis = 0——每一列的平均值;axis = 1——每一行的平均值 - 求所有元素的中位数:
np.median(A)
- 求所有元素累加和:
np.cumsum(A)
- 累差:
np.diff(A)
- 非零数的位置:
np.nonzero(A)
A = np.arange(2,14).reshape((3,4)) print(A) 输出: [[ 2 3 4 5] [ 6 7 8 9] [10 11 12 13]] # 4. 求矩阵中元素的最大数最小数对应索引 print(np.argmin(A)) # 求所有元素中最小数对应的索引 print(np.argmax(A)) # 求所有元素中最大数对应的索引 输出: 0 11 # 5. 求所有元素的平均值 print(np.mean(A)) print(A.mean()) print(np.average(A)) 输出: 7.5 7.5 7.5 # 6. 求每行或者每列元素的平均值;axis=0,对列计算,axis=1,对行计算 print(np.mean(A,axis = 0)) print(np.mean(A,axis = 1)) 输出: [6. 7. 8. 9.] [ 3.5 7.5 11.5] # 7. 求所有元素的中位数 print(np.median(A)) 输出:7.5 # 8. 求所有元素累加和 print(np.cumsum(A)) 输出: [ 2 5 9 14 20 27 35 44 54 65 77 90] # 9. 累差 print(np.diff(A)) #由3行4列变为3行3列 输出: [[1 1 1] [1 1 1] [1 1 1]] # 10. 非零数的位置 print(np.nonzero(A)) 输出: (array([0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2], dtype=int64), array([0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3], dtype=int64)) # 输出2个array,第一个array代表行索引,带二个array代表列索引:行索引为0,列索引为0,1,2,3的元素都非零
3.3 排序
- 每行都升序排序:
np.sort(A)
- 转置矩阵:
A.T
或np.transpose(A)
- 转置后矩阵与转置前相乘:
(A.T).dot(A)
- 截取——使用clip()函数,超出边界的元素,都变为边界数字
np.clip(A,5,11)
—— A表示矩阵,5和11为边界;小于5的数字变为5,大于11的数字变为11
A=np.arange(14,2,-1).reshape(3,4) print(A) 输出: [[14 13 12 11] [10 9 8 7] [ 6 5 4 3]] # 1. 每行升序排序 print(np.sort(A)) 输出: [[11 12 13 14] [ 7 8 9 10] [ 3 4 5 6]] # 2. 转置矩阵 - 两种写法 print(A.T) print(np.transpose(A)) 均输出: [[14 10 6] [13 9 5] [12 8 4] [11 7 3]] # 3. 转置后矩阵与转置前相乘 print((A.T).dot(A)) 输出: [[332 302 272 242] [302 275 248 221] [272 248 224 200] [242 221 200 179]] # 4. 截取clip(),超出边界的元素,都变为边界数字 print(np.clip(A,5,11)) #小于5的数字变为5,大于11的数字变为11 输出: [[11 11 11 11] [10 9 8 7] [ 6 5 5 5]]
4. numpy的索引
4.1 一维序列
# 定义一个array A = np.arange(3,15) print(A) 输出: [ 3 4 5 6 7 8 9 10 11 12 13 14] # 1. 获取一维数组指定索引的元素值 print(A[3]) # 索引为 3 的值为6 输出:6
4.2 二维矩阵
- 获取二维数组指定索引的元素值:
array[行索引][列索引]
- 获取某行、某列值:
array[行索引, 列索引]
# 定义一个array A = np.arange(3,15).reshape((3,4)) print(A) 输出: [[ 3 4 5 6] [ 7 8 9 10] [11 12 13 14]] # 1. 获取二维数组指定索引的元素值 print(A[2][1]) #行索引为【2】,列索引为【1】对应的元素值 print(A[2,1]) 输出: 12 12 # 2. 获取某行、某列值 print(A[2,:]) #行索引为2,所有列 print(A[2,0:2]) #行索引为2,列索引为0,1 print(A[:,2]) #所有行,列索引为2 输出: [11 12 13 14] [11 12] [ 5 9 13]