2017-06-18 9 views
0

私はブロードキャストルールとnumpy.dotメソッドを乗算係数より少し明確にしたいと考えています。私は、新しい軸(3,1の形状)を加えることによって掛けることができる形状(2、3)の2つの配列を作成しましたが、新しい軸を追加して回転させてもnp.dot (3,1)形状にする。ここでは、以下の小さなテストが行​​われます。形状のナンシードット(2、)(3,1)は誤差を与えますが乗算はしません

x_1 = np.random.rand(2,) 
print(x_1) 
x_2 = np.random.rand(3,) 
print(x_2) 
> [ 0.48362051 0.55892736] 
> [ 0.16988562 0.09078386 0.04844093] 

x_8 = np.dot(x_1, x_2[:, np.newaxis]) 
> ValueError: shapes (2,) and (3,1) not aligned: 2 (dim 0) != 3 (dim 0) 

x_9 = x_1 * x_2[:, np.newaxis] 
print(x_9) 
> [[ 0.47231067 0.30899592] 
    [ 0.17436521 0.11407352] 
    [ 0.01312074 0.00858387]] 

x__7 = x_1[:, np.newaxis] * x_2[:, np.newaxis] 
> ValueError: operands could not be broadcast together with shapes (2,1) (3,1) 

私は(2,1)のnp.dotを理解&(1,3)動作しますが、なぜない(2,1)&(3,1)放送のルール番号2は、二次元である、と言うので、互換性があります.1つの次元が1の場合、np.dotが機能するか、またはルール番号2が間違っていると理解していますか?また、X_9がなぜ同じ形であるのかx_8(np.dot)ではなく(乗算)、なぜ動作するのですか?

+1

'放送中の'ルールは 'ドット'には適用されません。 – hpaulj

+0

'dot 'が2つの1d配列で何をすると思いますか?または、2を2dに拡張した場合内部製品?アウト? – hpaulj

+0

@hpaulj方程式は私が取り組んでいた、δ= W f(h)は内積を取得しようとしています。最後にスカラー値。だから私は、nump倍以上のnp.dotメソッドを使って、より理解しやすく、どこでnp.dotとnumpyの乗算を使うべきかを検討していました。これについて知りたいことがあれば教えてください。そして、ありがとう、np.dotがそれらに適用されないことを放送の文書で知りませんでした。 –

答えて

1

np.dotは、行列 - 行列乗算(列ベクトルは1つの列と1つの行を持つ行列としての行ベクトルとみなすことができます)のためのものです。 *(乗算)は、引数の1つがスカラーで、それ以外の場合にはスカラー乗算のためのものです。だから放送規則はnp.dot用ではない。放送ルールに記載されているように、ために働くx_9 二つのアレイ上で動作している場合、ここでhttps://docs.scipy.org/doc/numpy-1.12.0/user/basics.broadcasting.html

、numpyのは、その形状の要素単位を比較します。それは後続の次元から始まり、その道を進む。それらが等しい、又はそれらの

  • 一方が1
  • あるので、(2)X_1のあなたの(唯一の)寸法は、に対応している場合

    1. 二寸法は互換性がありますx_2の最後の次元(新しい次元を追加したため1です)と残りの次元は3です。

    関連する問題