所以,我有一个numpy数组,我想计算元素在特定间隔内的出现频率。例如,>
array = np.array([0, 1, 1, 1, 2, 3, 4, 5]) intervals = np.array([0., 0.5, 1., 1.5, 2., 2.5, 3., 3.5, 4., 4.5, 5.]) result = {0.5: 0.125, 1.5: 0.375, 2.5: 0.125, 3.5: 0.125, 4.5: 0.125}
我的代码工作正常,但对我来说看起来很混乱
import numpy as np from collections import Counter def freqs(arr): #defining our intervals intervals = np.arange(round(np.min(arr)), round(np.max(arr))+0.5, 0.5) frequency = list() #going through every number in array, if smaller then interval's value, appending interval's value for arr_i in arr: for intr_j in intervals: if arr_i < intr_j: frequency.append(intr_j) break #counting intervals' values dic = dict(Counter(frequency)) #divide dic's values by lenghth of an array freqs = dict(zip(list(dic.keys()), (np.array(list(dic.values())))/len(arr))) return freqs
我不喜欢的部分是我们将字典的值除以数组的长度,并使用许多结构来声明新字典。但是我们所做的只是将值除以一定的数目。
所以,我有一个numpy数组,我想计算元素在特定间隔内的出现频率。例如,array = np.array([0,1,1,1,2,3,4,5])间隔= np.array([0。,0.5,1.,1.5,...
我可以使用np.histogram
函数获得与您相同的结果。
result, _ = np.histogram(array, bins=intervals)
result = result / len(array)
filter_result = result[np.where(result > 0)]
print(filter_result)
[0.125 0.375 0.125 0.125 0.125 0.125]