问题:我想从两个输入数组中输出一个数组,其中真值的频率(来自 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/