2017-07-17 7 views
0

私は解決策が見つかるまで実行されるプログラムの有効性をベンチマークしており、プログラムがその解決策を見つけ出す傾向があることを示すためにグラフを作成しようとしています。プログラムは時には500回の試行を要し、時には2000年を要します。彼らは目標を見つけるまで、彼らが着実により良く、より良い答えを生み出したことを示すことができます。私は何百回も走っているので、すべてのランの平均がどのように動くのかを見たいと思っていますが、numpyは異なる長さのデータを平均化することができません。どのようにすれば、各テスト番号で利用可能なデータポイントを平均化するだけですか?サンプルが消滅してデータをプロットする方法はありますか?

EX:trial1 = 33.4853、32.3958、30.2859、33.2958、30.1049、29.3209]

trial2 = 45.2937、44.2983、42.2839、42.1394、41.2938、39.2936、38.1826、36.2483、39.2632、37.1827、35.9936、 BEave:

Iを取り戻すしたい32.4837、31.5599、29.3209]

BE = numpy.array([trial1、trial2])

BEave = numpy.average(= 0と、軸) = [39.3895,38.34705,36.2849,37.7176,35.69935,34.30725,38.1826,36.2483,39.2632 、37.1827,35.9936,32.4837,31.5599、29.3209]

+0

あなたの例では、タイプミスやエラーを持っています。あなたはそれらを修正することはできますか? – jacoblaw

+0

長さの異なる2つの配列の平均が実際にどのようになるかははっきりしません。予想される出力**と一緒に簡単な例**を提供できますか? – ImportanceOfBeingErnest

+0

あなたの問題文のデータサイズからnumpyのようには見えません - 可変長リストのリストは細かいはずです – f5r5e5d

答えて

0

大規模な配列のnansを作成し、それぞれの最大試行回数まで試行を記入することができます。残りの配列行は、nanのままです。次に、平均を垂直軸に沿って、numpy.nanmeanを使用して取得します。

import numpy as np 
import matplotlib.pyplot as plt 

trial1 = [33.4853, 32.3958, 30.2859, 33.2958, 30.1049, 29.3209] 

trial2 = [45.2937, 44.2983, 42.2839, 42.1394, 41.2938, 39.2936, 38.1826, 
      36.2483, 39.2632, 37.1827, 35.9936, 32.4837, 31.5599, 29.3209] 

m= np.max([len(trial1), len(trial2)]) 

# create array of nans 
BE = np.ones((2, m))*np.nan 
# fill it with trials up to the number of trial values 
BE[0,:len(trial1)] = trial1 
BE[1,:len(trial2)] = trial2 

# nanmean = take mean, ignore nans 
BEave = np.nanmean(BE, axis=0) 

plt.plot(trial1, label="trial1", color="mediumpurple") 
plt.plot(trial2, label="trial2", color="violet") 
plt.plot(BEave, color="crimson", label="avg") 

plt.legend() 
plt.show() 

enter image description here

+0

ありがとうございます。各ステップから最高と最低を得る方法もありますか?私は、グラフのベスト、最悪、平均を表示できるようにしたいと思います。 –

+0

"best"と "worst"は最小値と最大値を意味し、numpyも 'nanmin'と' nanmax'メソッドを持っています。 – ImportanceOfBeingErnest

関連する問題