我有一个关于用所需的 bin 宽度重新组合数字列表的问题。这基本上是频率直方图的作用,但我不想要图,只想要 bin 编号和每个 bin 的出现次数。
到目前为止,我已经编写了一些我想要的代码,但是效率不是很高。给定一个 list a
,为了用等于 3 的 bin-width 重新组合它,我写了以下内容:
import os, sys, math
import numpy as np
# list of numbers
a = list(range(3000))
# number of entries
L = int(len(a))
# desired bin width
W = 3
# number of bins with width W
N = int(L/W)
# definition of new empty array
a_rebin = np.zeros((N, 2))
# cycles to populate the new rebinned array
for n in range(0,N):
k = 0
for i in range(0,L):
if a[i] >= (W*n) and a[i] < (W+W*n):
k = k+1
a_rebin[n]=[W*n,k]
# print
print a_rebin
现在,这正是我想要的,但我认为它不是那么聪明,因为它会读取整个列表N
时间,N
以及垃圾箱的数量。对于小列表来说很好。但是,由于我必须处理非常大的列表和相当小的 bin 宽度,这会转化为巨大的值,N
并且整个过程需要很长时间(数小时......)。你有什么想法来改进这段代码吗?先感谢您!