あなたの説明は基本的には、76020個の行をそれぞれ含む二つの列で構成されている
曖昧であり、各行は2つのエントリを有しています。
(2,76020,2)
のうち、2
は、どのエントリですか?
私はm*a[None,None,:]
と同じだそれ
In [8]: m
Out[8]:
array([[[3, 4],
[5, 8]],
[[1, 2],
[2, 2]]])
In [9]: m*a
Out[9]:
array([[[ 9, 20],
[15, 40]],
[[ 3, 10],
[ 6, 10]]])
(その表示も曖昧である)あなたのm
があると信じています。放送するとき、numpyは必要に応じて最初に自動的に次元を追加します。または、反復:
In [6]: m[:,:,0]*3
Out[6]:
array([[ 9, 15],
[ 3, 6]])
In [7]: m[:,:,1]*5
Out[7]:
array([[20, 40],
[10, 10]])
m
が(2,2,2)
形状であるので、我々はオフの手はa
を掛けることになっている軸伝えることはできません。
受け入れ答えによると、あなたは中央の軸
In [16]: m*a[None,:,None]
Out[16]:
array([[[ 9, 12],
[25, 40]],
[[ 3, 6],
[10, 10]]])
しかし、何m
場合、形状が(2,3,2)
だったに沿って掛けたいですか? a
を3つの値
In [17]: m=np.array([[[3,4],[5,8],[0,0]],[[1,2],[2,2],[1,1]]])
In [18]: m*a[None,:,None]
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-18-f631c33646b7> in <module>()
----> 1 m*a[None,:,None]
ValueError: operands could not be broadcast together with shapes (2,3,2) (1,2,1)
代替放送の作業今
In [19]: m*a[:,None,None]
Out[19]:
array([[[ 9, 12],
[15, 24],
[ 0, 0]],
[[ 5, 10],
[10, 10],
[ 5, 5]]])
In [20]: m*a[None,None,:]
Out[20]:
array([[[ 9, 20],
[15, 40],
[ 0, 0]],
[[ 3, 10],
[ 6, 10],
[ 3, 5]]])
m
は異なる寸法を有する場合、例えばを有する必要があろう(3,1000,2)
では、軸を使って2要素のウェイト配列を扱うことができます。
ディメンションを区別するために、このようなコードをテストするとよい考えです。あなたのテスト 'm'は形'(2,2,2) 'です。これは「列」の次元です。それが '(3,10,2) 'か、または別の次元のものであれば、どの軸(2つの要素を持つ)がどの軸に適用できるかどうかを一目で分かります。 – hpaulj
はい、あなたは正しいです! – user