Numpy 配列ブロードキャストでの次の演習を検討してください。
import numpy as np
v = np.array([[1.0, 2.0]]).T # column array
A2 = np.random.randn(2,10) # 2D array
A3 = np.random.randn(2,10,10) # 3D
v * A2 # works great
# causes error:
v * A3 # error
ブロードキャストの Numpy ルールを知っておりbsxfun
、Matlab の機能に精通しています。(2,1) 配列を (2,N,N) 配列にブロードキャストしようとして失敗する理由と、この前に (2,1) 配列を (2,1,1) 配列に再形成する必要があることを理解しています放送が通ります。
私の質問は次のとおりです。ブロードキャストを試みるときに、必要な次元を具体的に伝えることなく、配列の次元を自動的にパディングするように Python に指示する方法はありますか?
(2,1) ベクトルを、それがブロードキャストされる多次元配列と明示的に結合したくありませんmult_v_A = lambda v,A: v.reshape([v.size] + [1]*(A.ndim-1)) * A
。「A」配列が 2D なのか 3D なのか ND なのかは事前にわかりません。
Matlab のbsxfun
ブロードキャスト機能は、必要に応じて次元を暗黙的にパディングするので、Python で何かできることを期待しています。