【问题标题】:Find Indexes that Maps a Numpy Array to Another查找将 Numpy 数组映射到另一个数组的索引
【发布时间】: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


【解决方案1】:

也许,在a 的索引上运行选择并使用此随机索引mapping 切片a

mapping = np.random.choice(np.arange(len(a)), len(a), replace=True)
b = a[mapping]

【讨论】:

  • 哇,您的代码在我的笔记本电脑上运行需要 0.004 秒!
猜你喜欢
  • 2016-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-27
  • 1970-01-01
  • 1970-01-01
  • 2015-07-14
  • 2017-05-26
相关资源
最近更新 更多