私は私が使用している別のソフトウェアの個々のインスタンスのリストに変換する必要があるヒストグラムを持っています: 「1」と3つのヒットの値が「2」の場合、私のリストは[1,1,1,1,2,2,2]
となります。与えられた長さのリストを作成する - ヒストグラムを値のリストに変換する
ヒストグラムは、たとえば、hist
というリストにパックされた2つのnumpy配列として構成されています。 hist[1]
の配列は私のビンのエッジを格納し、hist[0]
の配列は各ビンのカウントを格納します。この変換を達成するための
非常に粗製の方法は、単純に次のコードを実行するために、次のようになります。
inhist=[]
for i in range(len(hist[0])):
for j in xrange(int(hist[0][i])):
inhist.append(int(hist[1][i]))
は、これを行うのより良い方法はありますか?特に、ヒストグラムが非常に大きくなると、おそらくこれを達成する最も効率的な方法ではありません。私が一定の価値を欲しがっている時間を正確に知っているのを見て、私は自分自身をすべて救うことができるのだろうかと思います。
私はこの全般を行うことがRAMを食べることを実感しますが、ひどく効率的ではありませんが、悲しいかな、現時点ではほとんど選択肢がありません。
EDIT: print hist
戻り値:
[array([ 0.00000000e+00, 1.83413630e+07, 1.74493106e+09,
7.91390628e+10, 4.54474023e+11, 5.38810039e+11,
3.01718080e+11, 1.38440761e+11, 6.17865624e+10,
2.77457730e+10, 1.32412328e+10, 6.71579967e+09,
3.35556066e+09, 2.00513046e+09, 1.18435261e+09,
7.34440685e+08, 5.13846805e+08, 3.97894623e+08,
1.97770421e+08, 1.11546165e+08, 6.63624300e+07,
3.93196820e+07, 2.81038760e+07, 1.87733930e+07,
1.57307950e+07, 1.55162030e+07, 1.38710060e+07,
3.52969100e+06, 2.32881000e+05, 5.32210000e+04,
1.59100000e+04, 4.89700000e+03, 1.61300000e+03,
6.54000000e+02, 2.63000000e+02, 1.08000000e+02,
3.10000000e+01, 8.00000000e+00, 4.00000000e+00,
2.00000000e+00]),
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,
34, 35, 36, 37, 38, 39, 40], dtype=uint64)]
私は現在、エラー 'TypeError例外を取得:DTYPEからの配列データをキャストすることはできません(「のfloat64」 )をdtype( 'int64')に変更します。 'hist [0] .astype(int)'ビットを表示するようにコードを修正できますか? –
@ P-M投稿を更新しました。 – Divakar
それは私が思ったことです。私は今、メモリエラーが発生します: 'トレースバック(最近の呼び出し最後): ファイル" path_length_distribution.py "、行24、 inhist = hist [1] [np.arange(len(hist [0]) ).repeat(hist [0] .astype(int))] MemoryError' 何が考えられますか? –