如何在Python中加速此操作?



我必须使用Python对数据执行一些操作;下面是一个花费太多时间(大约21分钟)的操作,我必须在不同的数据集上执行许多这样的操作。这是正常的吗,还是可以快一点?

flag = np.array([], dtype=np.bool_)
for i in range(len(dset1)):
flag = np.append(flag, np.any(abs(dset1[i, 0] - dset2[:, 0]) / 1000 <= 500))

dset1的长度为72805,dset2的长度为1455873。

永远不要这样使用np.append!在本例中,它分配了72805次不同的数组。

相反,至少要这样做:

flag = np.array([
np.any(abs(dset1[i,0]-dset2[:,0])/1000 <= 500) for i in range(len(dset1))
])

首先迭代地构建一个列表,然后一次将其转换为数组。

如果dset1dset2只是数组,那么这里还有另一个优化可以通过智能广播来完成-但这应该会减少大部分运行时间。


另一个优化的解决方案是跳过for循环,只对其进行矢量化:

dset1row = dset1[:, 0]
dset2row = dset2[:, 0]
flag2 = np.any((abs(dset1row[:, np.newaxis] - dset2row[np.newaxis, :]) < (500 * 1000)), axis=1)

最新更新