您的位置:首页 > 编程语言 > Python开发

Python中的numpy矩阵运算

2017-10-22 11:11 465 查看

numpy中matrix 和 array的区别

Numpy matrices必须是2维的,但是 numpy arrays (ndarrays) 可以是多维的(1D,2D,3D····ND). Matrix是Array的一个小的分支,包含于Array。所以matrix 拥有array的所有特性。

在numpy中matrix的主要优势是:

(1)相对简单的乘法运算符号。

例如,a和b是两个matrices,那么a*b,就是矩阵积。

>>> import numpy as np
>>> a=np.mat('4 3; 2 1')
>>> b=np.mat('1 2; 3 4')
>>> a
matrix([[4, 3],
[2, 1]])
>>> b
matrix([[1, 2],
[3, 4]])
>>> a*b
matrix([[13, 20],
[ 5,  8]])


(2)matrix 和 array 都可以通过objects后面加.T 得到其转置。但是 matrix objects 还可以在后面加 .H得到共轭矩阵, 加 .I 得到逆矩阵。相反的是在numpy里面arrays遵从逐个元素的运算,所以array:c 和d的c∗d运算相当于对应的元素相乘

>>> c=np.array([[4, 3], [2, 1]])
>>> d=np.array([[1, 2], [3, 4]])
>>> c*d
array([[4, 6],
[6, 4]])


(3) ∗∗ 运算符的作用也不一样 :

>>> a**2
matrix([[22, 15],
[10,  7]])
>>> c**2
array([[16,  9],
[ 4,  1]])


因为a是个matrix,所以a∗∗2返回的是a∗a,相当于矩阵相乘。而c是array,c∗∗2相当于,c中的元素逐个求平方。

(3)numpy中矩阵间的除法运算

>>> a/2
matrix([[2, 1],
[1, 0]])
>>> a/b
matrix([[4, 1],
[0, 0]])


取得是整数

基本运算

import numpy as np
a = np.mat([[-1,2],[2,3]])
b = np.mat([[3,4],[4,5]])
print 'a:\n',a
print 'b:\n',b
print '\n a transpose:\n',a.T #转置
print '\n a inv:\n',np.linalg.inv(a) # 求逆
print "\n a-b: \n",a-b  # a - b,矩阵相减
print "\n a dot b: \n",a*b #2x2矩阵,矩阵相乘
print "\n a/b \n:",b/a  # numpy中的除是对矩阵元素展开计算
print "\n a trace:\n",np.trace(a)  #求迹
eigval,eigvec = np.linalg.eig(a) #特征,特征向量
print "\n a eig value:\n",eigval
print'\n a eig vector:\n',eigvec

a = np.zeros([4,5])
print  '\n all zero \n',a
a = np.ones([7,6])
print  '\n all one \n',a
a = np.eye(4,7)
print  '\n 4x7 diagonal \n',a
a = np.diag(range(5))
print  '\n 5x5 diagonal \n',a
a = np.empty((2,3))
print '\n empty \n',a


结果:

a:
[[-1  2]
[ 2  3]]
b:
[[3 4]
[4 5]]

a transpose:
[[-1  2]
[ 2  3]]

a inv:
[[-0.42857143  0.28571429]
[ 0.28571429  0.14285714]]

a-b:
[[-4 -2]
[-2 -2]]

a dot b:
[[ 5  6]
[18 23]]

a/b
: [[-3  2]
[ 2  1]]

a trace:
2

a eig value:
[-1.82842712  3.82842712]

a eig vector:
[[-0.92387953 -0.38268343]
[ 0.38268343 -0.92387953]]

all zero
[[ 0.  0.  0.  0.  0.]
[ 0.  0.  0.  0.  0.]
[ 0.  0.  0.  0.  0.]
[ 0.  0.  0.  0.  0.]]

all one
[[ 1.  1.  1.  1.  1.  1.]
[ 1.  1.  1.  1.  1.  1.]
[ 1.  1.  1.  1.  1.  1.]
...,
[ 1.  1.  1.  1.  1.  1.]
[ 1.  1.  1.  1.  1.  1.]
[ 1.  1.  1.  1.  1.  1.]]

4x7 diagonal
[[ 1.  0.  0. ...,  0.  0.  0.]
[ 0.  1.  0. ...,  0.  0.  0.]
[ 0.  0.  1. ...,  0.  0.  0.]
[ 0.  0.  0. ...,  0.  0.  0.]]

5x5 diagonal
[[0 0 0 0 0]
[0 1 0 0 0]
[0 0 2 0 0]
[0 0 0 3 0]
[0 0 0 0 4]]

empty
[[ 1.  0.  0.]
[ 0.  0.  0.]]


注意矩阵除法运算的结果

print "\n a/b \n:",b/a  # numpy中的除是对矩阵元素展开计算
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: