2016-12-14 11 views
2

関連する確率で整数値0、...を取るN個の分布があります。さらに、私は3つの変数[値、PROB]仮定:私は最初のX + Yを畳み込むN個の変数があるよう確率関数の畳み込みPython

import numpy as np 
x = np.array([ [0,0.3],[1,0.2],[3,0.5] ]) 
y = np.array([ [10,0.2],[11,0.4],[13,0.1],[14,0.3] ]) 
z = np.array([ [21,0.3],[23,0.7] ]) 

を、私はこれにZ追加、および。 残念ながらnumpy.convole()は入力変数として1-d配列をとるため、この場合は直接適合しません。私はそれらのすべての値0,1,2、...、23を取るために変数を使って遊んでいます(値がPr = 0を知らない場合)...私はもっと良い解決策があるように感じます。

もっと効率的にするための提案はありますか?前もって感謝します。

答えて

3

私はScipyの組み込みメソッドがありません。カスタム離散ランダム変数を定義する方法がありますが、それらは加算をサポートしていません。ここではあなたの例のようにimport pandas as pdx,y,zを想定して、パンダを使用したアプローチである:出力は二つ以上の変数で

array([[ 10. , 0.06], 
     [ 11. , 0.16], 
     [ 12. , 0.08], 
     [ 13. , 0.13], 
     [ 14. , 0.31], 
     [ 15. , 0.06], 
     [ 16. , 0.05], 
     [ 17. , 0.15]]) 

ある

values = np.add.outer(x[:,0], y[:,0]).flatten() 
probs = np.multiply.outer(x[:,1], y[:,1]).flatten() 
df = pd.DataFrame({'values': values, 'probs': probs}) 
conv = df.groupby('values').sum() 
result = conv.reset_index().values 

、あなたが間を行き来する必要はありません。 numpyとpandas:最初に追加の変数を含めることができます。

values = np.add.outer(np.add.outer(x[:,0], y[:,0]), z[:,0]).flatten() 
probs = np.multiply.outer(np.multiply.outer(x[:,1], y[:,1]), z[:,1]).flatten() 

脇:それは、彼らが(実数対整数)異なる固有のデータ型を持っている場合は、別のnumpyのアレイ内の値と確率を維持する方が良いでしょう。

関連する問題