python中的矩阵运算_Python中的numpy矩阵运算

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中的除是对矩阵元素展开计算

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值