a = np.array([0,1,2])
b = np.array([3,4,5,6,7])
...
c = np.dot(a,b)
我想对b进行转置,以便可以计算a和b的点积。
答案 0 :(得分:4)
您可以为此使用numpy的广播:
import numpy as np
a = np.array([0,1,2])
b = np.array([3,4,5,6,7])
In [3]: a[:,None]*b
Out[3]:
array([[ 0, 0, 0, 0, 0],
[ 3, 4, 5, 6, 7],
[ 6, 8, 10, 12, 14]])
但是,这与点积无关。但是在您说的评论中,您想要这个结果。
您还可以使用numpy函数outer
:
In [4]: np.outer(a, b)
Out[4]:
array([[ 0, 0, 0, 0, 0],
[ 3, 4, 5, 6, 7],
[ 6, 8, 10, 12, 14]])
答案 1 :(得分:1)
为此,您想要的是两个数组的外积。您要使用的功能是np.outer
,:
a = np.array([0,1,2])
b = np.array([3,4,5,6,7])
np.outer(a,b)
array([[ 0, 0, 0, 0, 0],
[ 3, 4, 5, 6, 7],
[ 6, 8, 10, 12, 14]])
答案 2 :(得分:0)
因此,使用NumPy,您可以调整交换轴的形状:
a = np.swapaxes([a], 1, 0)
# [[0]
# [1]
# [2]]
然后
print(a * b)
# [[ 0 0 0 0 0]
# [ 3 4 5 6 7]
# [ 6 8 10 12 14]]
交换b
要求对产品进行换位,如下所示。
a = np.array([0,1,2])
b = np.array([3,4,5,6,7]).reshape(5,1)
print((a * b).T)
# [[ 0 0 0 0 0]
# [ 3 4 5 6 7]
# [ 6 8 10 12 14]]
重塑就像b = np.array([ [bb] for bb in [3,4,5,6,7] ])
,然后b
变成:
# [[3]
# [4]
# [5]
# [6]
# [7]]
a
时无需移调:
a = np.array([0,1,2]).reshape(3,1)
b = np.array([3,4,5,6,7])
print(a * b)
# [[ 0 0 0 0 0]
# [ 3 4 5 6 7]
# [ 6 8 10 12 14]]
a = [0,1,2]
b = [3,4,5,6,7]
print( [ [aa * bb for bb in b] for aa in a ] )
#=> [[0, 0, 0, 0, 0], [3, 4, 5, 6, 7], [6, 8, 10, 12, 14]]
答案 3 :(得分:0)
其他人提供了outer
和广播解决方案。这是dot
个人:
np.dot(a.reshape(3,1), b.reshape(1,5))
a[:,None].dot(b[None,:])
a[None].T.dot( b[None])
从概念上讲,我认为这有点过头了,但由于实施细节,它实际上是最快的