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)
有没有什么办法可以做到这一点?我也试过转置函数,但它不管用。
2 个回答
1
一种更简单的方法是这样定义你的数组:
>>>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]])
41
我们先来看两个数组:
>>> 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
或者你也可以简单地使用 outer:
np.outer(a,b)
这三种方法得到的结果都是一样的。
你可能还会对这样的内容感兴趣,这样每个向量总是保持为一个二维数组:
np.dot(np.atleast_2d(a).T, np.atleast_2d(b))