numpy的 matrix 和 ndarray 所能表示的数据维数不同,matrix 只能表示二维数据,而 ndarray 可以表示 N 维数据。
一般,使用 numpy 的 array。
两者初始化:
matA = np.mat([[1, 2],[3, 4]])
arrB = np.array([[1, 2], [3, 4]])
乘法:都有 *,np.dot, np.multiply
三种。
import numpy as np
matA = np.mat([[1, 2], [3, 4]])
matB = np.mat([[1,1], [1, 1]])
print('A*B \n', matA*matB)
print('np.dot(A,B)\n', np.dot(matA,matB))
print('multiply \n', np.multiply(matA,matB))
运行结果:
A*B
[[3 3]
[7 7]]
np.dot(A,B)
[[3 3]
[7 7]]
multiply
[[1 2]
[3 4]]
直接使用 mat(array)
;
示例:
import numpy as np
from numpy import random,mat
r_arr=random.rand(4,4)
print('r_arr',r_arr)
r_mat=mat(r_arr)
print(r_mat.I)#求逆
运行结果:
r_arr [[ 0.65603592 0.39908438 0.44722351 0.92652759]
[ 0.32357477 0.45384697 0.31687359 0.73861219]
[ 0.3534119 0.12693696 0.15701767 0.9163409 ]
[ 0.36515841 0.87377377 0.44150506 0.4605718 ]]
r_mat [[ 0.65603592 0.39908438 0.44722351 0.92652759]
[ 0.32357477 0.45384697 0.31687359 0.73861219]
[ 0.3534119 0.12693696 0.15701767 0.9163409 ]
[ 0.36515841 0.87377377 0.44150506 0.4605718 ]]
//r_mat.I
[[ 2.20907786 -11.21482242 4.73076477 4.12886716]
[ -1.79239654 -4.48728612 3.52875987 3.78121743]
[ 2.86148809 15.82430961 -11.71577803 -7.82425058]
[ -1.09402215 2.23536661 0.78545617 -0.77549894]]
mat求逆
import numpy as np
from numpy import random,mat,eye
r_arr=random.rand(4,4)
r_mat=mat(r_arr)
r_invmat=r_mat.I
r2_mat=r_mat*r_invmat
print('r2_mat',r2_mat)
print('error',r2_mat-eye(4))
直接使用matrix A
属性, 即 matrix.A
.
示例:
import numpy as np
mat = np.mat([[1,2],[3,4]])
print('mat type:{}, \n mat:\n{}'.format(type(mat), mat))
arr = mat.A
print('arr type:{}, \n arr:\n{}'.format(type(arr),arr))
结果:
mat type:<class 'numpy.matrixlib.defmatrix.matrix'>,
mat:
[[1 2]
[3 4]]
arr type:<class 'numpy.ndarray'>,
arr:
[[1 2]
[3 4]]
参考: