根据bin大小将一个列表分成多个列表

2024-09-27 07:27:11 发布

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

我有一个包含超过100000个值的列表。

我需要根据特定的箱子宽度(比如0.1)将列表分成多个较小的列表。有谁能帮我写一个python程序来完成这个任务吗?

我的名单是这样的

-0.234
-0.04325
-0.43134
-0.315
-0.6322
-0.245
-0.5325
-0.6341
-0.5214
-0.531
-0.124
-0.0252

我想要这样的输出

list1 = [-0.04325, -0.0252] 
list2 = [-0.124] 
list3 = [-0.234, -0.245 ] 
list4 = [-0.315] 
list5 = [-0.43134] 
list6 = [-0.5325, -0.5214, -0.531] 
list7 = [-0.6322, -0.6341]

Tags: 程序列表宽度名单list2list1箱子个值
3条回答

这就是你想要的吗?(示例输出会有帮助:)

f = [-0.234, -0.04325, -0.43134, -0.315, -0.6322, -0.245, 
     -0.5325, -0.6341, -0.5214, -0.531, -0.124, -0.0252]

import numpy as np
data = np.array(f)
hist, edges = np.histogram(data, bins=10)
print hist

收益率:

 [2 3 0 1 0 1 2 0 1 2]

所以这个问题assigning points to bins可能会有帮助。

下面是一个使用numpys digitize的简单而好的方法:

>>> import numpy as np
>>> mylist = np.array([-0.234, -0.04325, -0.43134, -0.315, -0.6322, -0.245,
                       -0.5325, -0.6341, -0.5214, -0.531, -0.124, -0.0252])
>>> bins = np.arange(0,-1,-0.1)
>>> for i in xrange(1,10):
...     mylist[np.digitize(mylist,bins)==i]
... 
array([-0.04325, -0.0252 ])
array([-0.124])
array([-0.234, -0.245])
array([-0.315])
array([-0.43134])
array([-0.5325, -0.5214, -0.531 ])
array([-0.6322, -0.6341])
array([], dtype=float64)
array([], dtype=float64)

数字化,返回一个数组,其中包含每个元素所属的bin的索引值。

这将创建一个dict,其中每个值都是一个元素列表,可以放在一个bin中。

import collections
bins = collections.defaultdict(list)
binId = lambda x: int(x*10)
for val in vals:
    bins[binId(val)].append(val)

相关问题 更多 >

    热门问题