たとえば、(1,2,3,4,5,6) のような形状の結合確率質量関数配列があり、いくつかの次元の値を条件として確率テーブルを計算したい (cpt をエクスポートする) 、意思決定の目的で。
現時点で思いついたコードは次のとおりです(入力は {'variable_1': value_1, 'variable_2': value_2 ... } の形式の辞書「vdict」です)
for i in vdict:
dim = self.invardict.index(i) # The index of the dimension that our Variable resides in
val = self.valdict[i][vdict[i]] # The value we want it to be
d = d.swapaxes(0, dim)
**d = array([d[val]])**
d = d.swapaxes(0, dim)
...
だから、私が現在していることは次のとおりです。
- 変数をcptの対応する次元に変換します。
- 0 番目の軸を前に見つけた軸と入れ替えます。
- 0軸全体を目的の値に置き換えます。
寸法を元の軸に戻します。
さて、問題は、ステップ 2 を実行するために、(a.) サブ配列を計算し、(b.) それをリストに入れて再び配列に変換する必要があるため、新しい配列が得られることです。
つまり、太字のものは、古いオブジェクトへの参照だけを使用する代わりに、新しいオブジェクトを作成することを意味します。これは、d が非常に大きく (これは私に起こります)、d を使用するメソッドが何度も呼び出される場合です (これもまた、 、私に起こります)結果全体が非常に遅いです。
では、この小さなコードを改良してより高速に実行できるアイデアを思いついた人はいますか? たぶん、その場で条件を計算できるようになるでしょう。
注:元の軸の順序を維持する必要があります(または、少なくとも、軸が削除されたときに変数をディメンション辞書に更新する方法を確認してください)。カスタムdtypeに頼りたくありません。