如何将两个向量相乘并得到一个矩阵?

51
在numpy操作中,我有两个向量,假设向量A是4X1,向量B是1X5,如果我执行AXB,它应该得到一个大小为4X5的矩阵。但是我尝试了很多次,进行了许多种重塑和转置,它们要么引发错误说未对齐,要么返回单个值。我该如何获得我想要的矩阵输出乘积?
3个回答

60

只要向量的形状正确,普通的矩阵乘法就能够运行。请记住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]])

5
如果你正在使用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(),所以最好不要使用它。

3

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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接