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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将两个向量相乘并得到一个矩阵?相关的知识,希望对你有一定的参考价值。

在numpy操作中,我有两个向量,假设向量A是4X1,向量B是1X5,如果我做AXB,它应该得到一个大小为4X5的矩阵。

但我尝试了很多次,进行了多种重塑和转置,它们都会引发错误,说不对齐或返回单个值。

我应该如何得到我想要的矩阵的输出产品?

答案

只要矢量具有正确的形状,正常的矩阵乘法就可以工作。请记住,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]])
另一答案

函数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)
另一答案

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

以上是关于如何将两个向量相乘并得到一个矩阵?的主要内容,如果未能解决你的问题,请参考以下文章

如何理解矩阵相乘的几何意义或现实意义

如何从两个数组中所有元素的乘积创建矩阵?

C:矩阵向量乘积,两个双数相乘给出错误符号

如何理解glm中四元数与向量相乘函数的写法

numpy矩阵向量乘法[重复]

在 C++ 中使用二维向量乘以矩阵