3

手術をしたい

フォーム1

通常の形状であれフォーム2 ば、np.einsum を使用できます。構文は次のようになると思います

np.einsum('ijp,ipk->ijk',X, alpha)

残念ながら、私のデータ X は、第 1 軸 (インデックスがゼロの場合) に非規則的な構造を持っています。

もう少し文脈を与えるためフォーム3に、i^ 番目のグループの j^ 番目のメンバーの p^ 番目の機能を参照します。グループのサイズは異なるため、事実上、これは長さが異なるリストのリストであり、同じ長さのリストのリストです。

フォーム4通常の構造を持っているため、標準の numpy 配列として保存できます (1 次元で提供され、次に alpha.reshape(a,b,c) を使用します。ここで、a、b、c は問題固有の整数です)。

Xをリストのリストのリストまたは異なる次元のnp.arraysのリストとして保存し、次のようなものを書くことは避けたい

A = []
for i in range(num_groups):
    temp = np.empty(group_sizes[i], dtype=float)
    for j in range(group_sizes[i]):
        temp[i] = np.einsum('p,pk->k',X[i][j], alpha[i,:,:])
    A.append(temp)

これは、これを行うための素晴らしい機能/データ構造ですか?それとも、部分的にのみベクトル化された実装で妥協する必要がありますか?

4

1 に答える 1