我想在numpy中为列向量找到一个命令,行向量等于矩阵
[1,1,1,1] ^ T * [2,3] = [[2,3],[2,3],[2,3],[2,3]]
答案 0 :(得分:5)
首先,让我们定义你的1-D 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输出矩阵。
答案 1 :(得分:0)
你遇到的问题是你的两个向量既不是列向量也不是行向量 - 它们只是向量。如果你看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)
的矩阵。
答案 2 :(得分:0)
如果您需要矩阵 - 请使用矩阵。这样你几乎可以逐字地使用你的表达式:
np.matrix([1,1,1,1]).T * np.matrix([2,3])
答案 3 :(得分:0)
您可能希望使用numpy.kron(a,b)
它需要两个阵列的Kronecker产品。您可以将b矢量视为块。该函数将该块与该向量的相应系数相乘,放在该系数的位置上。您也可以将它用于矩阵。
对于您的示例,它看起来像:
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]])
希望这会对你有所帮助。