我有一个相当简单的块,它可以获得两个数组中两个选定元素之间的绝对值差异。
import numpy as np
# Input data with proper format.
N_bb, N_cc = np.random.randint(1e5), np.random.randint(1e5)
bb = np.random.uniform(0., 1., N_bb)
cc = np.random.uniform(0., 1., N_cc)
# My actual code repeats this process ~500 times.
all_ds = []
for _ in range(500):
# An index into cc for each element in bb.
idx_into_cc = np.random.randint(0, len(cc), len(bb))
# This is the block I need to make faster.
aa = []
for i, b in enumerate(bb):
aa.append(abs(b - cc[idx_into_cc[i]]))
d = np.median(aa)
# Use 'd' before the next iteration, and store the result.
all_ds.append(some_func(d))
我使用绝对差异,因为我需要正值,我也可以使用平方差。 bb
和cc
数组在整个过程中保持不变,但每次迭代时idx_into_cc
都会发生变化。
如何改善此代码的性能?
答案 0 :(得分:3)
我们可以简单地使用矢量化索引来删除内部循环,就像这样 -
d = np.median(np.abs(bb-cc[idx_into_cc]))