逐行点积列python numpy

2024-05-08 06:13:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着把nx3向量中每一行的点积取出来。让我再解释一下:我需要的是从nx3到nx3x3阵列。你知道吗

如果我有以下情况:

A = np.array([[1, 2, 2],
              [4, 2, 3])

我想知道它是什么:

第一个元素:

np.dot(A[0].reshape(3,1), A[0].reshape(1,3)) = array([[1, 2, 2], [2, 4, 4], [2, 4, 4]])

第二个要素:

np.dot(A[1].reshape(3,1), A[1].reshape(1,3)) = array([[16, 8, 12], [8, 4, 6], [12, 6, 9]])

所以我的最后一个数组是:

result = array([[[ 1, 2,  2], 
                 [ 2, 4,  4], 
                 [ 2, 4,  4]],
                [[16, 8, 12], 
                 [ 8, 4,  6], 
                 [12, 6,  9]])

result.shape = (2, 3, 3)

我知道我可以用for循环来实现这一点,但我想肯定有一种方法可以更快更直接地实现。速度对我的需要至关重要。你知道吗

希望我解释得足够正确。先谢谢你。你知道吗


Tags: 方法元素fornp情况数组resultarray
1条回答
网友
1楼 · 发布于 2024-05-08 06:13:07
In [301]: A = np.array([[1, 2, 2],
     ...:               [4, 2, 3]])
     ...: 
     ...: 

这不是一个dot积;没有积的总和。相反,它更像是一个outer产品,增加了维度的数量。numpy通过广播可以很好地做到这一点:

In [302]: A[:,:,None]*A[:,None,:]
Out[302]: 
array([[[ 1,  2,  2],
        [ 2,  4,  4],
        [ 2,  4,  4]],

       [[16,  8, 12],
        [ 8,  4,  6],
        [12,  6,  9]]])

相关问题 更多 >