数组文件的读写
np.save和np.load函数以numpy内建二进制格式存储和读取数字对象,大部分用户会用pandas或其他工具来存取文本、表格文件。
1 | import numpy as np |
1 | np.load('some_array.npy') #从文件中读取数组 |
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
1 | np.savez('array_archive.npz', a=arr, b=arr) #使用关键字参数存错多个数组,未压缩格式 |
1 | arch = np.load('array_archive.npz') #从npz文件中读取数组数据对象,该对象以类似字典的形式表示 |
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
1 | np.savez_compressed('arrays_compressed.npz', a=arr, b=arr) #以压缩格式保存数组 |
线性代数函数
1 | x = np.array([[1., 2., 3.], [4., 5., 6.]]) |
array([[ 1., 2., 3.],
[ 4., 5., 6.]])
1 | y = np.array([[6., 23.], [-1, 7], [8, 9]]) |
array([[ 6., 23.],
[ -1., 7.],
[ 8., 9.]])
1 | x.dot(y) #矩阵点乘 |
array([[ 28., 64.],
[ 67., 181.]])
1 | np.dot(x, y) #全局函数形式 |
array([[ 28., 64.],
[ 67., 181.]])
1 | np.dot(x, np.ones(3)) #二维数组点乘一维向量 |
array([ 6., 15.])
1 | x @ np.ones(3) #python3.5版本以上,点乘可以以@表示 |
array([ 6., 15.])
numpy.linalg是numpy线性代数库,包含了常用的线性代数函数
1 | from numpy.linalg import inv, qr |
array([[ 1.31386887, -6.35141544, 1.88626458, -6.16060108,
-1.61105243],
[ -6.35141544, 45.53241364, -12.64585185, 40.44409478,
11.13390453],
[ 1.88626458, -12.64585185, 3.93294826, -11.5040055 ,
-3.15881188],
[ -6.16060108, 40.44409478, -11.5040055 , 37.05474997,
9.82733633],
[ -1.61105243, 11.13390453, -3.15881188, 9.82733633,
2.91712818]])
1 | mat.dot(inv(mat)) |
array([[ 1.00000000e+00, -2.03263834e-14, -4.44066681e-15,
6.33434894e-15, 6.35591881e-16],
[ -2.46609105e-16, 1.00000000e+00, 2.45780426e-15,
2.92475759e-15, -4.42834742e-16],
[ -1.24211599e-15, -4.02376796e-15, 1.00000000e+00,
5.88409131e-15, 4.85369671e-16],
[ -1.82510818e-15, 6.24289242e-16, -3.48747349e-15,
1.00000000e+00, 2.50976255e-15],
[ -1.74634203e-15, -5.97517012e-15, 2.95250279e-16,
6.38984296e-15, 1.00000000e+00]])
1 | q, r = qr(mat) #矩阵的QR分解 |
array([[-8.96390593, 5.04075656, -2.28672019, -5.68262082, -7.65475092],
[ 0. , -1.73065451, 1.20032719, 1.07003633, 4.51499433],
[ 0. , 0. , -3.05481272, -0.64206845, -1.15803315],
[ 0. , 0. , 0. , -0.71357743, 2.62657632],
[ 0. , 0. , 0. , 0. , 0.06433249]])
如果实(复)非奇异矩阵A能够化成正交(酉)矩阵Q与实(复)非奇异上三角矩阵R的乘积,即A=QR,则称其为A的QR分解。
QR(正交三角)分解法是目前求一般矩阵全部特征值的最有效并广泛应用的方法,一般矩阵先经过正交相似变化成为Hessenberg矩阵,然后再应用QR方法求特征值和特征向量。它是将矩阵分解成一个正规正交矩阵Q与上三角形矩阵R,所以称为QR分解法,与此正规正交矩阵的通用符号Q有关。
常用线性代数函数
函数 | 描述 |
---|---|
diag | 返回一个矩阵的对角线元素组成的数组,或者根据一个一维数组产生一个以该数组为对角线的矩阵 |
dot | 矩阵点乘 |
trace | 计算对角线元素的和(矩阵的迹) |
det | 计算矩阵行列式 |
eig | 计算特征值和特征向量 |
inv | 计算矩阵的逆矩阵 |
pinv | 计算 Moore-Penrose逆矩阵 |
qr | 计算QR分解 |
svd | 计算SVD分解 |
solve | 求方程 Ax = b 中的向量X,A是矩阵 |
lstsq | 计算 Ax = b的最小二乘答案 |