构成一个4X4的随机数组
>>> from numpy import *
>>> random.rand(4,4)
array([[ 0.64739371, 0.58006968, 0.53814822, 0.95993873],
[ 0.39470874, 0.68392526, 0.397054 , 0.83557031],
[ 0.39251183, 0.18655464, 0.54314147, 0.80914483],
[ 0.67786307, 0.60178295, 0.12575287, 0.93371132]])
>>>
NumPy矩阵与数组的区别
NumPy函数库中存在两种不同的数据类型(矩阵matrix和数组array),都可以用于处理行列表示的数字元素。虽然它们看起来很相似,但是在这两个数据类型上执行相同的数学运算可能得到不同的结果,其中Numpy函数库中的matrix与MATLAB中matrices等价。
调用mat()函数可以将数组转化为矩阵:
>>> randMat=mat(random.rand(4,4))
>>> randMat.I
matrix([[ 4.30396488e-02, 8.53829248e-01, 8.52008572e-01,
-1.64503665e+00],
[ 8.70389017e-01, 5.00807467e-01, -1.12177378e+00,
4.33989407e-01],
[ 4.55273551e-01, -8.01367450e-01, 8.91059570e-01,
-1.24397320e-03],
[ -1.22686498e+00, -1.03491701e-01, 5.96470687e-02,
1.46893235e+00]])
.I操作实现了矩阵求逆的运算。
矩阵与逆矩阵相乘
>>> invRandMat=randMat.I
>>> randMat*invRandMat
matrix([[ 1.00000000e+00, 7.42133465e-17, -9.76185381e-17,
-3.56544374e-17],
[ 2.80528862e-17, 1.00000000e+00, 8.65675301e-17,
-8.69098918e-17],
[ 1.85128364e-16, -1.36699179e-16, 1.00000000e+00,
-3.31196933e-17],
[ 3.61944405e-17, 4.68364837e-17, -6.28964878e-17,
1.00000000e+00]])
结果应该是单位阵,对角线元素都是1,其他元素应该全为0。实际输出结果略有不同,矩阵里还留下了许多非常小的元素,是计算机处理误差产生的结果。输入下面的命令,得到误差值:
>>> myEye=randMat*invRandMat
>>> myEye-eye(4)
matrix([[ 2.22044605e-16, 7.42133465e-17, -9.76185381e-17,
-3.56544374e-17],
[ 2.80528862e-17, -3.33066907e-16, 8.65675301e-17,
-8.69098918e-17],
[ 1.85128364e-16, -1.36699179e-16, 2.22044605e-16,
-3.31196933e-17],
[ 3.61944405e-17, 4.68364837e-17, -6.28964878e-17,
-2.22044605e-16]])
函数eye(4)创建4X4的单位矩阵。