我有一个简单的numpy数组(3xN),如下所示:
v = np.array([[-3.33829, -3.42467, -3.53332],
[-2.67681, -2.6082 , -3.49502],
[-3.49497, -2.73177, -2.61499],
[-2.76056, -3.57753, -2.67334],
[-1.96801, -3.47521, -3.51974],
[-1.25571, -2.69451, -3.45554],
[-1.94568, -2.59504, -2.72568],
[-1.28991, -3.47927, -2.73176],
[-0.51201, -3.50684, -3.40448],
[ 0.22398, -2.70244, -3.43421]])
这里,N = 10,但在我的真实的情况下,它比这里(+500)大得多,每一行都是一个点--欧几里得坐标。
我想执行:
其中i、j和k表示与v不同的行。
我怎样才能在Python上快速地实现它呢?
2条答案
按热度按时间vsaztqbk1#
您可以使用numpy broadcasting操作来完成此操作:
即使对于大小为500的数组,计算结果也只需几秒钟:
oxiaedzo2#
IIUC,该方程表示成对向量差异,而不是向量之间的平方距离。
N个向量之间的成对差将是N * N个向量。
最后,我假设您只在
j
和k
轴上进行缩减,输出向量是(10,3)
而不是(10,)
。基准-