Python中数组的矩阵乘法

4 投票
3 回答
14033 浏览
提问于 2025-04-16 15:48

我觉得问这个问题有点傻,但我就是找不到答案。

我在用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 结合起来。

撰写回答