-2

Python Numpy での行列演算と混同しました。ドット演算とアウター演算は、線形代数のクラスで学んだように動作しないようです。

import numpy
n = numpy.arange(-5, 6)
w = numpy.arange(-20, 21)
n.shape
w.shape
outer = numpy.outer(w, n)
outer.shape
dot = numpy.dot(n, outer.transpose())
dot.shape

ここで、n は (11, 1) 行列、w は (41, 1) 行列です。wとnの大きさが合っていないと思います((41,1)outer(11,1))

繰り返しますが、ドットは奇妙だと思います。n は (11, 1) 行列、outer.transpose() は (11, 41) 行列です。サイズも合わないと思います。

4

1 に答える 1

2

ドキュメントhttp://docs.scipy.org/doc/numpy/reference/generated/numpy.outer.htmlによると、outer2 つの行ベクトルの関数は行列でA(1xn)あり、転置は次元になります。これはまさにあなたが見ているものです。B(1xm)M(nxm)mxn

したがって、ベクトルと行列のドット積は、ドキュメントで再度説明されています: http://docs.scipy.org/doc/numpy/reference/generated/numpy.dot.html#numpy.dot - それは本質的にどこにあります行ベクトル (最初の引数) と 2 番目の引数 (行列) の転置の行列乗算として記述されます。

コードが作成するさまざまなオブジェクトの形状を出力すると、次のようになります。

n.shape:     (11,)
w.shape:     (41,)
outer.shape: (41, 11)h
dot.shape:   (41,)

これは上記と完全に一致しています。あなたの混乱は何ですか?期待していなかった結果は何ですか?

于 2013-10-09T03:56:15.743 に答える