numpy数组与矩阵运算
重点在于对数组和矩阵的处理。
一、数组
1.创建数组 方式多样
np.array(列表 元组 range对象)
np.arange(n):同range
np.linspace():等差
np.logspace():等比
np.zeros((a,b))
np.ones((a,b))
np.identity(dim):dim*dim的单位矩阵
np.randint(s, e, num / typle):随机数组
np.rand(num):随机数
np.diag([,,,,]):对角矩阵
2.测试数组元素是否足够接近 判断浮点数相等
isclose(a, b, rtol=相对误差, atol=绝对误差, equalnan=):判断每个位置元素是否相等,返回若干个true/false。
allclose(同上):判断是否都相等,返回一个true/false。
3.修改数组值
np.append(arr, num/list)
np.insert(arr, posi, num/list)
arr[posi] = num
arr[一/二维切片] = num,这个修改方法比较多样 查文档
4.数组与标量运算 以乘方为例
arr ** num:arr内每个元素乘num次方。
num ** arr:num乘arr内的每个元素次方。
5.数组排序
np.argsort(arr):返回升序排序后的原数组下标。
arr[_]:这才能输出排序后的结果。
np.argmax(arr):求最大值
下标。
np.argmin(arr)
arr.sort(axis=):原数组内排序。
6.数组内积
np.dot(x,y):计算对应位置元素乘积之和。
7.数组访问
b[0]
b[0][0] = b[0,0]
b[[0, 1]]:第一二行所有元素。
b[[0, 1], [0, 1]]:第一行第一列,第二行第二列。
#第一个列表是行,第二个列表是列。不指定列,表示所有列。
b[: : -1]:反向切片
8.数组的函数运算
np.sin(x)
np.cos(x)
np.round(x):四舍五入。
np.ceil(x):向上取整。
9.改变数组形状
x.shape:查看数组形状
x.size:查看数组元素个数
x.shape =:原地修改形状。-1表示自动计算。
x = x.reshape(( , )):返回一个新数组。不能修改元素个数,必须reshape前后相同。
x.resize(( , )):通过删除元素或者补0,能修改元素个数。
10.数组布尔运算
x > 1:返回true/false数组。
x[x > 1]:返回满足条件的数组。
sum(x > 1 & ... & ... ):返回满足条件的元素个数。
np.all(x < 1)
np.any(x < 1)
#两个数组相比 在对比机器学习pred和target值时非常实用
a > b:同上
对应位置元素相比
a[a < b & ... & ... | ... | ...]:任意添加条件。
11.数组堆叠与合并
np.hstack((a1, a2)):对应元素水平堆叠(合并)。
np.vstack((a1, a2)):垂直堆叠。
np.concatenate((a1, a2), axis=):合并。
二、矩阵
1.矩阵生成
矩阵
只能是二维的,只能包含数字。矩阵运算也和数组不同。
np.matrix(可迭代对象)
2.矩阵转置 第i行变成第i列
x.T
3.计算矩阵特征
!axis=0,相当于把矩阵压缩到x轴。axis=1,相当于压缩到y轴。
x.mean(axis)
x.sum(axis)
x.max(axis)
x.argmax(axis)
x.diagonal():对角线元素。
x.nonzero():非0元素下标。
4.矩阵乘法
x*y
5.计算相关系数矩阵
np.corrcoef([], [])
6.方差、协方差、标准差
np.cov(x, y):
如果有X,Y两个变量,每个时刻的“x值
与其均值之差”乘以“y值
与其均值之差”得到一个乘积,再对这每时刻的乘积求和并求出均值。
np.cov(x):方差。
np.std(x):标准差。
7.计算特征值和特征向量
e, v = np.linalg.eig(列表/np数组/矩阵
):返回特征值和特征向量。
8.计算可逆矩阵
y = np.linalg.inv(x)
9.奇异值分解
~可以把大矩阵分解为多个小矩阵的乘积,实现降维。
np.linalg.svd(a):将a分解为 u*np.diag(s)*v,并返回usv,其中s的元素就是a的奇异值。
还能计算线性方程组和范数。