python - 根据 np.histogram 分配的另一个列表 list/gets 总结 list/array
python - sum up list/array according to how another list list/gets assigned by np.histogram
我有两个等长的列表a, b
。我想从 a
创建一个直方图,并将 b
的值汇总到一个新列表 c
中,根据 a
的元素分配给哪个 bin。
a = [0.3, 1.2, 1.8, 0.5, ...]
b = [1, 1, 0, 0, ...]
hist = np.histogram(a, bins=[0.0, 0.5, 1., 1.5, 2.])
在上面的示例中,b[0]
将被添加到 c[0]
,因为 a[0]
被添加到 hist[0]
; b[1]
将被添加到 c[2]
等。在不使用循环的情况下执行此操作的可扩展方法是什么? (循环对于大型列表来说太慢了。)
为此,我推荐 pandas
:
import pandas as pd
buckets = pd.cut(a, bins=[0.0,0.5,1, 1.5, 2])
result = pd.Series(b).groupby(buckets).sum()
输出:
(0.0, 0.5] 1
(0.5, 1.0] 0
(1.0, 1.5] 1
(1.5, 2.0] 0
dtype: int64
我有两个等长的列表a, b
。我想从 a
创建一个直方图,并将 b
的值汇总到一个新列表 c
中,根据 a
的元素分配给哪个 bin。
a = [0.3, 1.2, 1.8, 0.5, ...]
b = [1, 1, 0, 0, ...]
hist = np.histogram(a, bins=[0.0, 0.5, 1., 1.5, 2.])
在上面的示例中,b[0]
将被添加到 c[0]
,因为 a[0]
被添加到 hist[0]
; b[1]
将被添加到 c[2]
等。在不使用循环的情况下执行此操作的可扩展方法是什么? (循环对于大型列表来说太慢了。)
为此,我推荐 pandas
:
import pandas as pd
buckets = pd.cut(a, bins=[0.0,0.5,1, 1.5, 2])
result = pd.Series(b).groupby(buckets).sum()
输出:
(0.0, 0.5] 1
(0.5, 1.0] 0
(1.0, 1.5] 1
(1.5, 2.0] 0
dtype: int64