python - 根据关联的 id 在 `master_order` 数组中的位置重新排序 numpy 数组

标签 python numpy

我正在寻找一个函数,当数组的长度为一百万时,它可以根据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/

相关文章:

python - 在 Spacy NER 模型中的评估

Python 异常 : how to print the last ten lines of stack trace?

python - 如何阻止 numpy meshgrid 将默认数据类型设置为 int64

python - 如何用 Pandas 检测上升和下降趋势?

python - 使用逻辑回归的泰坦尼克号机器学习问题

python - 为什么这个脚本的运行时间是 O(n^2)?

python - 自定义格式为 JSON

python - 安装redis时缺少redis库

python - 精炼Python代码以供使用(跳过重复步骤)

python - 为什么我的 Docker 容器内的 pip 不安装预编译的包?