gpt4 book ai didi

python - 加速 python 中的 numpy 循环?

转载 作者:太空狗 更新时间:2023-10-29 23:59:01 35 4
gpt4 key购买 nike

考虑以下使用非常慢的 numpy 数组的代码:

# Intersection of an octree and a trajectory
def intersection(octree, trajectory):
# Initialize numpy arrays
ox = octree.get("x")
oy = octree.get("y")
oz = octree.get("z")
oe = octree.get("extent")/2
tx = trajectory.get("x")
ty = trajectory.get("y")
tz = trajectory.get("z")
result = np.zeros(np.size(ox))
# Loop over elements
for i in range(0, np.size(tx)):
for j in range(0, np.size(ox)):
if (tx[i] > ox[j]-oe[j] and
tx[i] < ox[j]+oe[j] and
ty[i] > oy[j]-oe[j] and
ty[i] < oy[j]+oe[j] and
tz[i] > oz[j]-oe[j] and
tz[i] < oz[j]+oe[j]):
result[j] += 1
# Finalize
return result

如何重写函数来加速计算? (np.size(tx) == 10000np.size(ox) == 100000)

最佳答案

您正在分配 10000 个大小为 100000 的列表。要做的第一件事是停止对嵌套的 j 循环使用 range 并使用生成器版本 xrange 代替。这将节省您分配所有这些列表的时间和空间。

下一个是使用向量化操作:

for i in xrange(0, np.size(tx)):
index = (ox-oe < tx[i]) & (ox+oe > tx[i]) & (oy-oe < ty[i]) & (oy+oe > ty[i]) & (oz-oe < tz[i]) & (oz+oe > tz[i])
result[index] += 1

关于python - 加速 python 中的 numpy 循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24071531/

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