【发布时间】:2014-10-14 21:32:56
【问题描述】:
我想在 numpy 中找到一个列向量乘以行向量等于矩阵的命令
[1,1,1,1] ^T * [ 2,3] = [[2,3],[2,3],[2,3],[2,3]]
【问题讨论】:
标签: python arrays numpy matrix
我想在 numpy 中找到一个列向量乘以行向量等于矩阵的命令
[1,1,1,1] ^T * [ 2,3] = [[2,3],[2,3],[2,3],[2,3]]
【问题讨论】:
标签: python arrays numpy matrix
首先,让我们定义一维 numpy 数组:
In [5]: one = np.array([ 1,1,1,1 ]); two = np.array([ 2,3 ])
现在,让它们相乘:
In [6]: one[:, np.newaxis] * two[np.newaxis, :]
Out[6]:
array([[2, 3],
[2, 3],
[2, 3],
[2, 3]])
这使用 numpy 的 newaxis 添加适当的轴以获得 4x2 输出矩阵。
【讨论】:
np.outer(one, two) 使用的方法相同。
您遇到的问题是您的两个向量既不是列向量也不是行向量 - 它们只是向量。如果您查看len(vec.shape),它就是1。
您可以做的是使用numpy.reshape 将您的列向量转换为形状(m, 1) 并将您的行向量转换为形状(1, n)。
import numpy as np
colu = np.reshape(u, (u.shape[0], 1))
rowv = np.reshape(v, (1, v.shape[0]))
现在,当您将colu 和rowv 相乘时,您将得到一个形状为(m, n) 的矩阵。
【讨论】:
如果您需要矩阵 - 使用矩阵。这样您就可以几乎逐字逐句地使用您的表达方式:
np.matrix([1,1,1,1]).T * np.matrix([2,3])
【讨论】:
您可能想使用numpy.kron(a,b) 它需要两个数组的克罗内克积。您可以将 b 向量视为一个块。该函数将此块乘以 a 向量的相应系数,放在该系数的位置上。您也可以将其用于矩阵。
对于您的示例,它看起来像:
import numpy as np
vecA = np.array([[1],[1],[1],[1]])
vecB = np.array([2,3])
Out = np.kron(vecA,vecB)
返回
>>> Out
array([[2, 3],
[2, 3],
[2, 3],
[2, 3]])
希望对你有所帮助。
【讨论】: