私は以下のことに苦労しています。私はパンダN x D
のデータフレームがp
と呼ばれていて、いくらか欠落している(NAN
)値があります。私はD x K x T
によってインデックスされた別の対応する配列を持っています。私はすべてのパンダのエントリn,d
のデータフレーム内のa[d][k][p[n,d]]
へのマップを作成して、可能なすべてのkについてN x D x K
マトリックスにしたいと考えています。 PandasとNumpyのライブラリでこれを最も効率的に行う方法についていくつか助けてもらえますか?パンダとナンシーファンシーインデックス
実際にはN x D
を最終行列の一部とし、列に沿ってN x K
行列を残して製品を取り出します。最終的な出力は(ゆっくり)以下で再現することができます。
def generate_entry(i, j):
result = np.prod([alpha[s][j][int(p.loc[i][s])] for s in range(num_features) if not isNaN(p.loc[i][s]) ])
return result
vgenerate_entry = np.vectorize(generate_entry)
result = np.fromfunction(vgenerate_entry, shape=(len(p), k), dtype=int)
私はpandas.get_dummies
の一部の使用は行列乗算のための参考になると思いますが、私は非常にそれを把握することはできません。
次ははるかに高速です:
r = None
for i in range(num_features):
rel_data = pd.get_dummies(data.ix[:,i])
rel_probs = alpha[i].T
prod = rel_data.dot(rel_probs)
prod[prod == 0] = 1
if r is None:
r = prod
else:
r = r.multiply(prod)
r = r.as_matrix()
r = r * pi
posteriers = r/np.sum(r, axis=1)[:, np.newaxis]
はい、それだけでかなり遅いです。 – modesitt
あなたはそれを共有できますか?どのように 'p'でNaNを避ける予定ですか?/それらのNaNに対応する出力はどうでしょうか? – Divakar
p [n、d]がnan – modesitt