【问题标题】:Replacing values in one array/list by index of another array/list用另一个数组/列表的索引替换一个数组/列表中的值
【发布时间】:2016-11-27 00:23:08
【问题描述】:

我有一个看似简单的问题,如果不循环,我似乎无法解决。 (我正在处理非常大的数组)

为了简单起见,假设我有一个排序数组和一个不同维度的未排序数组,例如: x=np.array([511,512,513]) 和 y=np.array([512,512,513,511,511])。 我想要一个快速函数,用排序的 min 到 max 数组 x 中给出的索引位置替换 y。 答案应该是 output =np.array([1,1,2,0,0])

我希望能够通过一两个步骤完成此操作。任何帮助将不胜感激,谢谢

【问题讨论】:

  • 转换排序后的数组,使索引为值,值为位置(hashmap?)。即[ 511 => 0, 512 => 1, 513 => 2] 未排序数组的查找将很快,因为您正在按键查找“排序数组”。
  • 感谢工作。这是我使用的:dictionary=dict(zip(x,z)) 其中 z 是索引数组 [0,1,2]。然后列表理解 l=[dicitonary[i] for i in unsortedlist]。很快。

标签: arrays indexing replace


【解决方案1】:

searchsorted() 完全符合您的要求:

import numpy as np

x=np.array([511,512,513])
y=np.array([512,512,513,511,511])
np.searchsorted(x, y) #  array([1, 1, 2, 0, 0])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-30
    • 2016-10-29
    • 1970-01-01
    • 1970-01-01
    • 2021-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多