Numpy数组array和矩阵matrix相互转换

1. 关于arrray 和 matrix

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]]

2. ndarray转换成matrix

直接使用 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))

3. matrix 转换array

直接使用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]]

参考:

  1. NumPy 中 ndarray 和 matrix 的区别;
  2. np matrix

你可能感兴趣的:(python,python包)