2

3 つの配列 (つまり、タイプnumpy.array)があるとします。

>>> w.shape
(113,)
>>> X.shape
(113,1)
>>> Y.shape
(113,)

numpy ヘルプ ページは、配列ではすべての乗算が要素単位であることを示唆しています。上記の 3 つのベクトルはすべて最初の次元のサイズが 113 であるため、乗算によってすべての場合に長さ 113 のベクトルが得られると考えましたが、そうではありません。

>>> (w * Y).shape     # expected
(113,)
>>> (w * X).shape     # ?!?!?!?!
(113,113)

2 番目の軸の 113 はどこから来たのですか? 私にはそれほど要素的に見えません。

4

2 に答える 2

3

2つのアレイを操作する場合、NumPyはそれらの形状を要素ごとに比較します。それは末尾の次元から始まり、前進します。2つの次元は、等しい場合、または1つが1の場合に互換性があります。

2つの軸のうち小さい方は、他の軸と一致するように引き伸ばされるか「コピー」されます。

Numpyの放送ルールがここに適用されています。

w      (1d array):       113
X      (2d array): 113 x   1   
Result (2d array): 113 x 113
于 2012-11-08T11:42:26.537 に答える
0

何が起こっているかを確認する最も簡単な方法は、例を使用することです。

w = array([5,6])
x = array([[1,2],[3,4]])
z = array([[5,6]])

w*x
# array([[ 5, 12],
#        [15, 24]])

w*z
# array([[25, 36]])
于 2012-11-08T11:48:43.413 に答える