我有一个充满索引的NumPy数组:
size = 100000
idx = np.random.randint(0, size, size=size)
我有一个简单的函数,在索引上循环,做:
out = np.zeros(size, dtype=np.int)
for i in range(size):
j = idx[i]
out[min(i, j)] = out[min(i, j)] + 1
out[max(i, j)] = out[max(i, j)] - 1
return np.cumsum(out)
当size
很大的时候,这是相当慢的,我希望找到一个更快的方法来实现这一点。我试过这个,但不太对:
out = np.zeros(size, dtype=np.int)
i = np.arange(size)
j = idx[i]
mini = np.minimum(i, j)
maxi = np.maximum(i, j)
out[mini] = out[mini] + 1
out[maxi] = out[maxi] - 1
return np.cumsum(out)
这似乎给出了与for循环相同的答案
我们可以利用^{} -
计时-
所有发布的解决方案最后都使用
cumsum
。所以,让我们计时跳过最后一步-相关问题 更多 >
编程相关推荐