点积超过Numpy的第二维?

时间:2019-11-27 18:26:43

标签: python numpy

我有N个向量的数组,每个向量的大小为3:

[[ 0  1  2]
 [ 3  4  5]
 [ 6  7  8]
 [ 9 10 11]
 [12 13 14]]

需要找到每个向量与其自身的点积。
因此,结果将是形状(N,3,3)的3维数组。一种方法是使用以下for循环:

for vector in np.arange(15).reshape(-1,3):
    np.outer(vector, vector)

由于数组可以任意大,所以我需要找到一个矢量化的解决方案。

1 个答案:

答案 0 :(得分:2)

您没有对任何轴求和,是吗?只是一个“划痕的”外部?

In [115]: arr=np.arange(15).reshape(5,3)                                        
In [116]: arr[:,:,None]*arr[:,None,:]     #using broadcasting                                          
Out[116]: 
array([[[  0,   0,   0],
        [  0,   1,   2],
        [  0,   2,   4]],

       [[  9,  12,  15],
        [ 12,  16,  20],
        [ 15,  20,  25]],

       [[ 36,  42,  48],
        [ 42,  49,  56],
        [ 48,  56,  64]],

       [[ 81,  90,  99],
        [ 90, 100, 110],
        [ 99, 110, 121]],

       [[144, 156, 168],
        [156, 169, 182],
        [168, 182, 196]]])
In [117]: _.shape                                                               
Out[117]: (5, 3, 3)

arr[:,:,None]@arr[:,None,:]做同样的事情,对那个大小为1的“虚拟”维度求和。