转置Numpy数组(向量)

时间:2019-02-09 19:54:03

标签: python numpy

a = np.array([0,1,2])
b = np.array([3,4,5,6,7])

...

c = np.dot(a,b)

我想对b进行转置,以便可以计算a和b的点积。

4 个答案:

答案 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要求对产品进行换位,如下所示。


或通常的NumPy重塑:

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])

从概念上讲,我认为这有点过头了,但由于实施细节,它实际上是最快的