【发布时间】:2021-01-29 08:12:56
【问题描述】:
如果我们有一个 numpy 数组 a 需要进行替换采样以创建第二个 numpy 数组 b,
import numpy as np
a = np.arange(10, 200*1000)
b = np.random.choice(a, len(a), replace=True)
查找名为mapping 的索引数组将a 转换为b 的最有效方法是什么?把np.random.choice改成更合适的功能就可以了。
以下代码太慢了,在 Macbook Pro 上创建 mapping 数组需要 7-8 秒。如果数组大小为 100 万,则需要更长的时间。
mapping = np.array([], dtype=np.int)
for n in b:
m = np.searchsorted(a, n)
mapping = np.append(mapping, m)
【问题讨论】:
-
刚刚用软件包numba试了一下,平均可以将运行时间缩短到3到4秒。不幸的是,numpy 的追加效率很低,而列表的追加要快得多。
-
np.searchsorted()和np.append()都是一些循环动作的替代品。事实上,如果它们在每次迭代时都执行而不是那样,那么性能上应该会很痛苦。
标签: python arrays algorithm numpy search