2016-07-07 5 views
1

確率密度関数(pdf)をプロットする(matplotlib.pyplotを使用)が、ゼロに近い。 例えば、平均値からの標準偏差のいくつかの倍数を離れているときの正規分布。広いテールテールの関数が与えられている場合:プロット範囲を減らす

pdfは、等距離のサンプリング点座標と関数の値をそれぞれ含む2つの配列samplingPtsfunctionValsと に格納されています。 両方の配列のタイプはnumpy.ndarrayで、長さは同じです。
私はちょうど配列を切り下げることで、迅速かつ汚いハックを使用して今まで:

# Define shortened arrays by dropping indices whose 
# corresponding value.__abs__() is below a given threshold 
threshold = 0.005 
samplingPts_shortened = samplingPts[scipy.absolute(functionVals) > threshold] 
functionVals_shortened = functionVals[scipy.absolute(functionVals) > threshold] 

非常に汚い実際のpdfはおそらく2頭の以上のこぶを持っており、ゼロに近いかもしれないので、それは最終的手掛かりすることはできませんその間に、「中間のサンプリング点」も排除されました。しかし、彼らは残って、プロットに存在する必要があります。 さらに、メモリ節約ではありません。

だから、私の質問は 機能を表す上記のように、2つの配列を与え、音声コードを実装する方法ある関数の値は、特にゼロから出始めるまで、両端にこれらの配列をダウンカット?

答えて

0

の先頭から、functionValsがしきい値を超えて増加したときに、それをカットしてみてはどうでしょうか。次にの最後から、functionValsがしきい値を上回って増加したときを見て、それを切り捨てますか?以下のような

何か:

for i in range(len(samplingPts)): 
    if scipy.absolute(functionVals[i]) > threshold: 
     break 
samplingPts = samplingPts[i:] 
functionVals = functionVals[i:] 

for i in range(len(samplingPts)-1, 0, -1)): 
    if scipy.absolute(functionVals[i]) > threshold: 
     break 
samplingPts = samplingPts[:i+1] 
functionVals = functionVals[:i+1] 
+0

これは自然な提案です。私は、スニペットを自分のコードにうまく統合しました。プロットのために探し出されたサブ配列が一時的にしか必要でないという事実からさらに利益を得ました: 'plot(samplingPts [lowIdx:highIdx + 1]、functionVals [lowIdx:highIdx + 1]ラベル= "pdf") ' まったくシャープな解決策ですが、ジョン、ありがとう! 私の担当者の得点が許せば、Upvoteが起こります。 – Hanno

関連する問題