用python重新绑定数字列表

2024-04-20 12:42:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个关于重新绑定一个数字列表的问题,需要一个所需的bin宽度。这基本上就是频率直方图的作用,但我不想要这个图,只想要每个箱子的箱子号和出现次数。

到目前为止,我已经写了一些代码,可以做我想做的,但是效率不高。给定一个列表a,为了用等于3的bin宽度重新插入它,我编写了以下内容:

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值,整个过程需要非常长的时间(小时…)。你有什么想法来改进这个代码吗?提前谢谢你!


Tags: of代码importnumber列表newbin宽度