数字のリストを必要なビン幅で再作成することについて質問がありました。これは基本的に周波数ヒストグラムですが、プロットは必要ありません。ビン番号と各ビンの発生回数だけは必要ありません。Pythonで数字のリストを再構築する
これまでのところ、私が欲しいことをするコードを書いていますが、あまり効率的ではありません。 、3に等しいビン幅でそれをREBINするためには、リストa
を考えると、私は次のように書いた:
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
の巨大な値に変換され、プロセス全体には非常に長い時間(時間)がかかります。このコードを改善するためのアイデアはありますか?前もって感謝します!
はい、私のアルゴリズムは最後のビンを逃しますが、あなたのソリューションは最後の2つのビンをマージします。 binwidthが3の[0,1,2,3,4,5,6,7,8,9]の場合は、[3,3,3,1]として出現が予想されますが、[3,3,4 ]。私がbindwithを選択した場合、私は[5,5]のような出現を期待していますが、このコードは、私が理解できないbinの辺を与えています。[0. 4.5 9.] ...残念ですが、 ... – urgeo
bin_edgesには、0,3,6,9の4つの値があります。最後の(最も右側の)ビンを除くすべてのビンは半開きです。3つの区間[0,3]、[3,6]、[6,9]があり、各ビンに3,3、および4の要素があることを意味します。独自のビンを定義することができます:[0,1,2]今では、[0、1]に1要素、[1,2]に2要素があります。今いいよ? –