我在编写一个将 2 个参数(值、分隔符)作为列表并将每个范围中的元素数(由分隔符中的数字确定)作为一个列表返回的函数时遇到了麻烦。等于其中一个分隔符的元素应计入下面的 bin 中。我使用 if 和 elif 对数字进行排序,这在某种程度上给了我正确的想法。但是,我正在努力研究如何应用“箱数 = 分隔线数 + 1”这一事实def histogram(values, dividers): count1 = 0 count2 = 0 count3 = 0 index = 0 for index in range(len(values)): if values[index] <= min(dividers): count1 = count1 + 1 elif min(dividers) < values[index] <= min(dividers): count2 = count2 + 1 elif values[index] > max(dividers): count3 = count3 + 1 index = index + 1 print("Number of elements in each bin is ", [count1, count2, count3])例如,当我运行参数 ([1,...,10], [2,5,7]) 时,答案应该是 [2,3,2,3] 因为范围内的元素数量低于 2, 2~5(不含5)、5~7(不含7)及7以上分别为2、3、2、3。但是目前,我得到了输出 [2,5,3]。PS 我的目标是在不使用 numpy.histogram 或任何 matplotlib 相关内容的情况下编写函数
1 回答
慕后森
TA贡献1802条经验 获得超5个赞
这不是最有效的实现,但它不假定values已排序(只有分隔符是):
def histogram(values, dividers):
bins = [0]*(len(dividers)+1)
extended_dividers = [-float('inf')]+dividers+[float('inf')]
for idx, divider in enumerate(extended_dividers[:-1]):
bins[idx] = len([v for v in values if divider<v<=extended_dividers[idx+1]])
return bins
另外,您的示例中的输出不应该是 1、2、3、4 吗?
添加回答
举报
0/150
提交
取消