【发布时间】:2021-04-17 11:40:16
【问题描述】:
我有一个简单的 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 上快速实现它?
【问题讨论】:
-
500 没什么大不了的。这种性能很关键吗? for 循环去 brrrr
-
这是 500^3 所以这可能是个大问题... 3 代表 3 for loops = 125,000,000
-
查看
numpy.einsum。它旨在处理此类情况。 -
在这种情况下,预期输出的形状是什么?我会按照等式假设
3XN? -
虽然看起来像欧式距离,但实际上不是坐标之间的差异,而是向量之间的差异。我可能是错的,但对我来说,等式表明相同。
标签: python-3.x numpy for-loop