我正在寻找一个函数,当数组的长度为一百万时,它可以根据ordered_ids创建一个新的值数组。
输入:
>>> ids=array(["WYOMING01","TEXAS01","TEXAS02",...])
>>> values=array([12,20,30,...])
>>> ordered_ids=array(["TEXAS01","TEXAS02","ALABAMA01",...])
输出:
ordered [ 20 , 30 , nan , ...]
结束摘要
@Dietrich 在列表理解中使用字典比使用 numpy 索引搜索 (numpy.where) 快 10 倍。我在下面的答案中比较了三个结果的时间。
最佳答案
你可以尝试:
import numpy as np
def order_array(ids, values, master_order_ids):
n = len(master_order_ids)
idx = np.searchsorted(master_order_ids, ids)
ordered_values = np.zeros(n)
ordered_values[idx < n] = values[idx < n]
print "ordered", ordered_values
return ordered_values
Searchsorted 为您提供索引,您应该将 id 插入 master_order_ids 以保持数组有序。然后,您只需删除那些超出 master_order_ids 范围的(idx,值)即可。
关于python - 根据关联的 id 在 `master_order` 数组中的位置重新排序 numpy 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21929971/