python - 用字典中的频率/值替换 NumPy 数组条目

标签 python arrays numpy dictionary

问题:我想从两个输入数组中输出一个数组,其中真值的频率(来自 input_2)对应于 input_1 的每个值。

import numpy as np   # import everything from numpy
from scipy.stats import itemfreq
input_1 = np.array([3,6,6,3,6,4])
input_2 = np.array([False, True, True, False, False, True])

对于这个例子,我想要的输出是:

output_1 = np.array([0,2,2,0,2,1])

我目前的方法涉及编辑 input_1,因此只保留对应于 True 的值:

locs=np.where(input_2==True,input_1,0)

然后计算每个答案的频率,创建字典并将 input_1 的适当键替换为值(真实频率)。

loc_freq = itemfreq(locs)
dic = {}
for key,val in loc_freq:
    dic[key]=val
print dic
for k, v in dic.iteritems():
    input_1[input_1==k]=v

输出 [3,2,2,3,2,1]。

这里的问题是双重的: 1) 这仍然不对不在字典中的键做任何事情(因此应该更改为 0)。例如,如何将 3 转换为 0? 2)这看起来很不优雅/无效。有没有更好的方法来解决这个问题?

最佳答案

np.bincount 就是您要查找的内容。

output_1 = np.bincount(input_1[input_2])[input_1]

关于python - 用字典中的频率/值替换 NumPy 数组条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27900831/

相关文章:

python - pandas 根据 "neighbours"删除行

python - 如何有效地生成所有可能的坐标对而不在numpy中重复

arrays - 在Excel中如何在排序后获取原始行索引

javascript - 使用 Javascript 数组创建 HTML 表格?

python - 并行化大 CSV 文件处理

python - 选择如何展平数组 (python)

python - Linregress 输出似乎不正确

python - 如何在 Python 的日志记录模块中使用现代字符串格式化选项?

python - 使用对数概率的复杂性 - 朴素贝叶斯文本分类器

python - 使用 Mercurial 跟踪 5 个文件中的微小差异?