web-dev-qa-db-ja.com

2つのベクトルを乗算して行列を取得する方法は?

Numpy演算では、2つのベクトルがあります。たとえば、ベクトルAが4X1、ベクトルBが1X5だとします。AXBを実行すると、サイズ4X5の行列になるはずです。

しかし、私は何度も試みて、さまざまな種類の変形や転置を行ったが、それらはすべて、位置合わせされていないというエラーを発生させるか、単一の値を返す。

必要なマトリックスの出力結果を取得するにはどうすればよいですか?

24
Larry

ベクトルが正しい形状である限り、通常の行列乗算は機能します。 Numpyの_*_は要素ごとの乗算であり、行列の乗算はnumpy.dot()(または_@_演算子を使用してPython 3.5)

_>>> numpy.dot(numpy.array([[1], [2]]), numpy.array([[3, 4]]))
array([[3, 4],
       [6, 8]])
_

これは「外の製品」と呼ばれます。 numpy.outer()を使用してプレーンベクトルを使用して取得できます。

_>>> numpy.outer(numpy.array([1, 2]), numpy.array([3, 4]))
array([[3, 4],
       [6, 8]])
_
25
Dietrich Epp

関数 matmul (numpy 1.10.1以降)は正常に動作します:

import numpy as np

a = np.array([[1],[2],[3],[4]])
b = np.array([[1,1,1,1,1],])

ab = np.matmul(a, b)
print (ab)
print(ab.shape)

ベクトルを正しく宣言する必要があります。最初の例は、上記の例のように、1つの数値のリストのリストでなければなりません(このベクトルは1行に列がなければなりません)。2番目のリストはリストのリスト(このベクトルは1列に行がなければなりません)です。

出力:

[[1 1 1 1 1]
 [2 2 2 2 2]
 [3 3 3 3 3]
 [4 4 4 4 4]]

(4, 5)
2
Serenity

Numpyを使用している場合。

まず、2つのベクトルがあることを確認します。たとえば、vec1.shape = (10, )およびvec2.shape = (26, ); numpyでは、行ベクトルと列ベクトルは同じものです。

次に、res_matrix = vec1.reshape(10, 1) @ vec2.reshape(1, 26) ;を実行します。

最後に、res_matrix.shape = (10, 26)が必要です。

numpyのドキュメントではnp.matrix()を廃止する予定なので、使用しない方がよいとされています。

0
max yi