大規模なコード ベースでは、np.broadcast_to
配列をブロードキャストするために使用しています (ここでは単純な例を使用しています)。
In [1]: x = np.array([1,2,3])
In [2]: y = np.broadcast_to(x, (2,1,3))
In [3]: y.shape
Out[3]: (2, 1, 3)
コードの他の場所では、Numpy 配列に対してベクトル化された方法で操作できるが、ufunc ではないサードパーティ関数を使用しています。これらの関数はブロードキャストを理解していません。つまり、配列のような関数を呼び出すのy
は非効率的です。Numpy のようなソリューションは、ブロードキャストを理解している一方で、配列要素にループvectorize
を導入し、非常に非効率的であるため、良くありません。for
理想的には、私ができるようにしたいのは、unbroadcast
必要に応じてフルサイズにブロードキャストできる最小形状の配列を返す、たとえば と呼ぶことができる関数を持つことです。例えば:
In [4]: z = unbroadcast(y)
In [5]: z.shape
Out[5]: (1, 1, 3)
次に、サードパーティ関数を で実行しz
、結果を にブロードキャストしy.shape
ます。
unbroadcast
Numpy のパブリック API に依存する実装方法はありますか? そうでない場合、望ましい結果を生み出すハックはありますか?