一、模块准备:
import numpy as np
二、矩阵运算:
# 矩阵准备
a=np.array([[1,2],
[3,4]])
b=np.array([[5,6],
[7,8]])
1、矩阵的加法运算:两矩阵对应元素相加
#方法1
a+b
#方法2
np.add(a,b)
结果:
2、矩阵的减法运算:两矩阵对应元素相减
#方法1
a-b
#方法2
np.subtract(a,b)
结果:
3、面向元素的乘法运算:两矩阵对应元素相乘
#方法1
a*b
#方法2
np.multiply(a,b)
结果:
4、面向元素的矩阵除法运算:两矩阵对应元素相除
#方法1
a/b
#方法2
np.divide(a,b)
结果:
5、面向矩阵的乘法运算:两矩阵相乘
#面向矩阵的乘法运算要求两矩阵1的行与矩阵2的列数相同,因此矩阵b需重新定义
a=np.array([[1,2],
[3,4]])
b=np.array([[1,2,3],
[4,5,6]])
#矩阵相乘
a.dot(b)
结果:
6、矩阵所有元素开根号:
np.sqrt(a)
结果:
7、矩阵所有元素求和:
np.sum(a)
结果:
8、矩阵所有行的个元素分别求和:
np.sum(a,axis=1)
结果:
9、矩阵所有列的元素分别求和:
np.sum(a,axis=0)
结果:
10、矩阵的所有元素求平均值:
np.mean(a)
结果:
11、矩阵的所有行分别求元素的平均值:
np.mean(a,axis=1)
结果:
12、矩阵的所有列分别求元素的平均值:
np.mean(a,axis=0)
结果:
13、矩阵的转置:
a=np.array([[0,2,1,3],
[2,3,0,1]])
#方法1
a.T
#方法2
np.transpose(a)
结果:
14、生成随机数:
#生成1到100的随机数(小数)
np.random.uniform(1,100)
结果:
二、矩阵的重构:
对矩阵进行重复构造:将其当作一个元素重复指定的次数 :
例1:
np.tile(a,(1,2))#行重复1次,列重复2次
例2:
np.tile(a,(2,2))#行重复2次,列重复2次
结果1: 结果2:
三、矩阵的排序:
# 矩阵准备:
d=np.array([[ 6, 5, 2],
[ 6, 18, 9],
[ 9, 11, 3],
[12, 33, 15]])
1、对每行的元素进行排序,输出结果索引
d.argsort()
结果:
2、对每列的元素进行排序,输出结果索引
d.argsort(axis=0)
结果:
3、对每行的元素进行排序,直接改变内部矩阵结果:
d.sort()
结果:
4、对每列的元素进行排序,直接改变内部矩阵结果:
d.sort(axis=0)
结果:
四、numpy中矩阵的广播性质:
现有两矩阵:
a=np.array([[1,2,3],
[4,5,6],
[7,8,9],
[10,11,12]])
b=np.array([2,3,3])
需求:要求矩阵a的每一行与b相加。
方法1,循环实现,Python的for循环性能较差,不建议。
for i in range(4):
a[i,:]+=b
方法2,借助numpy的重构函数实现,原理还是矩阵的相加。
a+np.tile(b,(4,1))
方法3,运用numpy中矩阵的广播性质: 当一个二维矩阵与一个单维矩阵相加时,默认多为矩阵的每一行(列)与单维矩阵相加。
a+b
结果:
五、矩阵的过滤
# 矩阵准备:
a=np.array([[ 1, 32, 3, 4],
[ 5, 36, 7, 8],
[ 9, 40, 11, 12]])
需求,过滤出矩阵中大于10的数字
1、构造布尔矩阵:
result_index=a>10
结果:
2、将原矩阵于布尔矩阵对应元素相乘:
e=a*result_index
结果:
六、将Pandas中的DataFrame类型数据转换为numpy中的array类型矩阵
1、模块准备:
import numpy as np
import pandas as pd
2、数据准备:
df=pd.DataFrame({'a':[1,2,3],'b':[4,5,6],'c':[7,8,9]})
结果:
3、转换方法:
#方法1
a=df.values
#方法2
a=np.array(df)
#方法3,不推荐
df.as_matrix()
结果: