2

numpy を使用しようとしていますがn by n、numpy でマトリックスを適切に定義する方法がわかりませんでした。...を使用しましたnumpy.zeros(n,n)が、大丈夫かどうかはよくわかりません。

このようにnumpyを使用するのは正しいですか? 取得しようとしています(matrix^T * vector) - vector

matrix = np.zeros((n,n))
start =  [(1/float(n)) for _ in range(n)]
vector = np.array(start)
newvector = np.dot(np.transpose(matrix) , vector)
ans=  np.subtract(newvector , vector)

間違った結果が得られ、どこに問題があるのか​​ わからないため、これを求めています

4

3 に答える 3

2

で行列を定義するにはnumpy、いくつかの選択肢があります。

  • numpy.zerosゼロで満たされた行列を定義します。
  • numpy.ones1 で満たされた行列を定義します。
  • numpy.array他のもの (リストなど) に基づいて行列を定義します
  • numpy.empty値を代入せずに行列を定義します (したがって、割り当てられた場所に現在メモリ内にあるものが含まれます)。

これらの関数はすべて、行列の次元を持つタプルを最初の引数として使用します。これが括弧が二重になっている理由です。

ではnumpy、要素ごとに実行される通常の演算子 (+、-、​​ /、**) を使用できます。

行列の乗算を実行するには、numpy.dot関数を使用する必要があります。

その後、次のように機能することができます。

n = 10
matrix = numpy.zeros((n,n))
vector =  numpy.ones(n) / n
newvector = numpy.dot(matrix.T, vector)
ans = newvector - vector

しかしmatrix、それはゼロの行列以外のものである必要があると思います。そうしないと、転置操作は必要ありません。

于 2013-04-23T13:20:12.547 に答える
1

@CharlesBrunet による回答に加えて、A*B(要素単位ではなく) 標準の行列乗算である数学行列用の特殊なクラスがあります。

numpy.matrix

配列のようなオブジェクトまたはデータの文字列から行列を返します。行列は、演算によって 2 次元の性質を保持する特殊な 2 次元配列です。* (行列乗算) や ** (行列累乗) などの特殊な演算子があります。

ドキュメントからの作成例:

>>> a = numpy.matrix('1 2; 3 4')
>>> print a
[[1 2]
 [3 4]]
>>> numpy.matrix([[1, 2], [3, 4]])
matrix([[1, 2],
        [3, 4]])
于 2013-04-23T15:18:01.957 に答える