[英]Multiplication of 1d arrays in numpy
我有两个一维向量(在某些情况下它们也可以是二维矩阵)。 我找到了点积的点函数,但如果我想将 a.dot(b) 与这些形状相乘:
a = [1,0.2,...]
a.shape = (10,)
b = [2.3,4,...]
b.shape = (21,)
a.dot(b) and I get ValueError: matrices not aligned.
我想做
c = a.dot(b)
c.shape = (10,21)
任何想法如何做到这一点? 我也试过转置功能,但它不起作用。
让我们从两个数组开始:
>>> a
array([0, 1, 2, 3, 4])
>>> b
array([5, 6, 7])
转置任何一个数组都不起作用,因为它只是一维的 - 没有什么可以转置,而是需要添加一个新轴:
>>> b.T
array([5, 6, 7])
>>> b[:,None]
array([[5],
[6],
[7]])
要使点积如图所示工作,您必须做一些令人费解的事情:
>>> np.dot(a[:,None],b[None,:])
array([[ 0, 0, 0],
[ 5, 6, 7],
[10, 12, 14],
[15, 18, 21],
[20, 24, 28]])
您可以依靠广播而不是dot
:
a[:,None]*b
或者您可以简单地使用外部:
np.outer(a,b)
所有三个选项都返回相同的结果。
您可能还对这样的事情感兴趣,以便每个向量始终是一个二维数组:
np.dot(np.atleast_2d(a).T, np.atleast_2d(b))
更简单的方法是像这样定义数组:
>>>b = numpy.array([[1,2,3]])
然后你可以轻松地转置你的数组:
>>>b.T
array([[1],
[2],
[3]])
你也可以做乘法:
>>>b@b.T
[[1 2 3]
[2 4 6]
[3 6 9]]
另一种方法是像这样强制重塑你的向量:
>>> b = numpy.array([1,2,3])
>>> b.reshape(1,3).T
array([[1],
[2],
[3]])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.