最近在熟悉python的科学计算,对于numpy的矩阵运算进行一些总结,和matlab还是很不一样的
import numpy as np
1、矩阵乘法
np.dot(a,b),但a,b都为一维矩阵的时候,.dot实现内积,不用考虑a,b具体是行向量还是列向量,也就是说,a,b同为行向量仍然可以计算
a.dot(b)
a@b
2、各个元素相乘
a*b 但当a,b分别为行向量和列向量时,返回矩阵,不管a,b谁在前边都是一样的结果
np.multiply(a,b),但当a,b分别为行向量和列向量时,.multiply返回矩阵,不管a,b谁在前边都是一样的结果
3、行向量变列向量
a = np.array([1,2,3])
b=np.transpose([a]) 修改b,不会对a进行修改
b = np.array([a]).T 修改b,不会对a进行修改
b = a.reshape(-1,1) 修改b,同时会对a进行修改
b = a[:,np.newaxis] 修改b,同时会对a进行修改
b=a.reshape(len(a),-1), 修改b,同时会对a进行修改
b=a[:,None]. 修改b,同时会对a进行修改
3.1、列向量变行向量
a = np.array([[2],[5],[8]])
b = np.transpose(a) 修改b,会对a进行修改
4、列向量b乘以行向量a
np.multiply(a,b)
np.multiply(b,a)
a*b
b*a
np.outer(a,b)
np.outer(b,a)
b@a会报错
5、行向量a乘以列向量b
a@b
6、需要注意
对矩阵或向量a:a[0]指的是第0行,
所以,对列向量a可以用a[0],a[1]来表示第0,1个元素,但是对行向量a必须用a[:,n]来表示第n个元素,如果对a[0]进行赋值,则是对整个行向量赋值。