【发布时间】:2020-08-22 16:33:08
【问题描述】:
我有以下代码计算1 <= i < j <= n 的对数,这样xs[i] == ys[j]:
def f(xs, ys):
s = 0
for j in range(xs.size):
s += np.sum(xs[:j] == ys[j])
return s
这在其他过程中被调用了几次,所以我需要它尽可能快(以一些内存成本)。
数组的大小是> 1e6。
有没有更快的等价物利用一些 numpy 魔法摆脱for 循环?
【问题讨论】:
-
你可以使用 Numba 吗?它是为这种事情而构建的。
-
尝试使用
np.broadcast_to(xs, (xs.shape[0], xs.shape[0]))得到一个重复xs的方阵,然后np.tril将对角线上的元素清零,然后np.sum(zeroed_matrix == ys)...不确定最后一部分,但是玩弄它 -
np.sum(zeroed_matrix==ys[:, np.newaxis])如this answer
标签: python arrays numpy optimization