在numpy操作中,我有两个向量,让我们说向量A是4X1,向量B是1X5,如果我做AXB,它应该得到一个大小为4X5的矩阵。
但我尝试了很多次,进行了多种重塑和转置,它们都会引发错误,说不对齐或返回单个值。
我应该如何获得我想要的矩阵的输出产品?
答案 0 :(得分:20)
只要矢量具有正确的形状,正常矩阵乘法就会起作用。请记住,Numpy中的*
是元素乘法,矩阵乘法适用于numpy.dot()
(或使用@
运算符,在Python 3.5中)
>>> numpy.dot(numpy.array([[1], [2]]), numpy.array([[3, 4]]))
array([[3, 4],
[6, 8]])
这被称为"外部产品。"您可以使用numpy.outer()
:
>>> numpy.outer(numpy.array([1, 2]), numpy.array([3, 4]))
array([[3, 4],
[6, 8]])
答案 1 :(得分:2)
函数matmul
(自numpy 1.10.1起)运行良好:
import numpy as np
a = np.array([[1],[2],[3],[4]])
b = np.array([[1,1,1,1,1],])
ab = np.matmul(a, b)
print (ab)
print(ab.shape)
您必须正确声明向量。第一个必须是一个具有一个编号的列表的列表(此向量必须在一行中有几列),第二个必须是一个列表的列表(该向量必须在一行中有行),如上例所示。
输出:
[[1 1 1 1 1]
[2 2 2 2 2]
[3 3 3 3 3]
[4 4 4 4 4]]
(4, 5)
答案 2 :(得分:0)
如果您使用的是numpy。
首先,请确保您有两个向量。例如vec1.shape = (10, )
和vec2.shape = (26, )
;在numpy中,行向量和列向量是同一件事。
第二,您进行res_matrix = vec1.reshape(10, 1) @ vec2.reshape(1, 26) ;
。
最后,您应该拥有:res_matrix.shape = (10, 26)
。
numpy文档说它将弃用np.matrix()
,所以最好不要使用它。