行的最快成对差异

时间:2016-11-15 02:40:27

标签: python numpy

我有一个n乘3的numpy数组,每行代表一个3D空间中的向量。

我想要一个3D n乘3乘3的数组,其中[i,j]处的向量表示向量i和j的每个分量之间的差异。

>>> x = np.random.randint(10, size=(4, 3))
>>> x
array([[4, 0, 8],
       [8, 5, 3],
       [4, 1, 6],
       [2, 2, 4]])
>>> x[:, np.newaxis] - x
array([[[ 0,  0,  0],
        [-4, -5,  5],
        [ 0, -1,  2],
        [ 2, -2,  4]],

       [[ 4,  5, -5],
        [ 0,  0,  0],
        [ 4,  4, -3],
        [ 6,  3, -1]],

       [[ 0,  1, -2],
        [-4, -4,  3],
        [ 0,  0,  0],
        [ 2, -1,  2]],

       [[-2,  2, -4],
        [-6, -3,  1],
        [-2,  1, -2],
        [ 0,  0,  0]]])

这是有效的,但是到目前为止我的程序中最慢的行...比我的欧几里德距离代码(利用点积和einsum更慢......)

是否有任何聪明的矩阵数学方法可以更有效地完成我想要的工作?

0 个答案:

没有答案