26

Numpy での配列ブロードキャストのルールを理解するのに苦労しています。

明らかに、同じ次元と形状の 2 つの配列に対して要素ごとの乗算を実行すると、すべて問題ありません。また、多次元配列にスカラーを掛けると機能します。これはわかります。

しかし、形状の異なる2 つの N 次元配列がある場合、放送規則が正確に何であるかは私にはわかりません。このドキュメント/チュートリアルでは、次のことを説明しています:ブロードキャストするには、操作の両方の配列の後続軸のサイズが同じであるか、いずれかが 1 である必要があります。

さて、Nを追跡することで、M x N配列内のを参照していると思います。つまり、2 つの 2D 配列 (行列) を同じ数の列で乗算しようとすると、うまくいくのでしょうか? そうでないことを除いて...

>>> from numpy import *
>>> A = array([[1,2],[3,4]])
>>> B = array([[2,3],[4,6],[6,9],[8,12]])
>>> print(A)
[[1 2]
 [3 4]]
>>> print(B)
[[ 2  3]
 [ 4  6]
 [ 6  9]
 [ 8 12]]
>>> 
>>> A * B
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: shape mismatch: objects cannot be broadcast to a single shape

との両方AB2 つの列があるため、これでうまくいくと思いました。したがって、「トレーリング軸」という用語と、それが N 次元配列にどのように適用されるかについて、ここで誤解していると思われます。

私の例が機能しない理由と、「後続軸」の意味を誰かが説明できますか?

4

3 に答える 3

22

さて、後続の軸の意味は、リンクされたドキュメントページで説明されています。次元数が異なる 2 つの配列 ( one1x2x3と other など2x3) がある場合、後続の共通次元 (この場合は ) のみを比較します2x3。ただし、両方の配列が 2 次元の場合、対応するサイズが等しいか、いずれかが である必要があります1。配列がサイズを持つ次元1は特異と呼ばれ、配列はそれらに沿ってブロードキャストできます。

あなたの場合、2x2and 4x2and4 != 2と none4または2equals が1あるため、これは機能しません。

于 2012-06-24T14:25:05.157 に答える