希望のビン幅で、数値のリストを再ビン化することについて質問があります。これは基本的に頻度ヒストグラムが行うことですが、プロットは必要なく、ビン番号と各ビンの発生回数だけが必要です。
これまでのところ、自分のやりたいことを実行するコードをいくつか書きましたが、あまり効率的ではありません。list が与えられたa
場合、3 に等しいビン幅で再ビン化するために、次のように記述しました。
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
小さなリストには問題ありません。しかし、非常に大きなリストとかなり小さなビン幅を扱わなければならないので、これは巨大な値に変換されN
、プロセス全体に非常に長い時間 (数時間...) かかります。このコードを改善するアイデアはありますか? 前もって感謝します!