Python中数组的矩阵乘法
我觉得问这个问题有点傻,但我就是找不到答案。
我在用Numpy处理数组时,想把一个3行1列的数组和一个1行3列的数组相乘,结果应该是一个3行3列的数组。但是因为点乘(dot函数)总是把第一个数组当成列向量,第二个当成行向量,所以我搞不定这个运算,因此我只能使用矩阵。
A=array([1,2,3])
print "Amat=",dot(A,A)
print "A2mat=",dot(A.transpose(),A)
print "A3mat=",dot(A,A.transpose())
u2=mat([ux,uy,uz])
print "u2mat=", u2.transpose()*u2
然后输出结果是:
Amat= 14
A2mat= 14
A3mat= 14
u2mat=
[[ 0. 0. 0.]
[ 0. 0. 0.]
[ 0. 0. 1.]]
3 个回答
0
一种获取这个的方式是使用 matrix
类或类型。
import numpy as np
A = np.matrix([1,2,3])
B = A.T #transpose of A
>>> B*A
>>> matrix([[1, 2, 3],
[2, 4, 6],
[3, 6, 9]])
属于矩阵类的对象和数组的表现非常相似。实际上,数组和矩阵是可以互相替换的。
3
>>> A=np.array([1,2,3])
>>> A[:,np.newaxis]
array([[1],
[2],
[3]])
>>> A[np.newaxis,:]
array([[1, 2, 3]])
>>> np.dot(A[:,np.newaxis],A[np.newaxis,:])
array([[1, 2, 3],
[2, 4, 6],
[3, 6, 9]])
当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。
8
np.outer 是一个内置函数,可以用来实现这个功能:
A = array([1,2,3])
print( "outer:", np.outer( A, A ))
(transpose
不适用,因为对于一维数组,A.T
和 A 是完全一样的:
print( A.shape, A.T.shape, A[:,np.newaxis].shape )
>>> ( (3,), (3,), (3, 1) )
)
补充一下:np.add.outer
是用来将元素对相加的——而 np.outer
则类似于 np.multiply.outer
。还有 np.ufunc.outer (A, B) 可以用来将元素对与任何二元 ufunc 结合起来。