gpt4 book ai didi

python-3.x - 向量中的三个 for 循环

转载 作者:行者123 更新时间:2023-12-04 08:16:22 25 4
gpt4 key购买 nike

我有一个简单的 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) 大得多。每行是一个点 - 欧几里得坐标。
我想执行:
enter image description here
其中 i、j 和 k 表示与 v 不同的行。
如何在 Python 上快速实现它?

最佳答案

您可以使用 numpy broadcasting 执行此操作操作:

diffs = ((v[:, None] - v) ** 2).sum(-1)
d = np.exp(diffs + diffs[:, None]).sum((0, 1))
print(d)

# [3.08316899e+11 2.37020625e+07 4.05357364e+12 8.22697743e+08
# 8.85209202e+04 2.55340202e+05 7.33879459e+04 1.88175133e+05
# 8.10134295e+08 6.62122925e+12]
即使对于大小为 500 的数组,也只需几秒钟即可计算出结果:
%%time
v = np.random.rand(500, 3)
diffs = np.sum((v[:, None] - v) ** 2, -1)
d = np.exp(diffs + diffs[:, None]).sum((0, 1))

# CPU times: user 2.74 s, sys: 5.5 ms, total: 2.75 s
# Wall time: 2.75 s

关于python-3.x - 向量中的三个 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65685335/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com