3

NumPy で:

A = np.array([[1,2,3],[4,5,6]])
array([[1, 3, 5],
       [2, 4, 6]])

B = np.array([[1,2],[3,4],[5,6]])
array([[1, 2],
       [3, 4],
       [5, 6]])

A.dot(B)
array([[35, 44],
       [44, 56]])

手に入れることだけが気になるA.dot(B).diagonal() = array([35, 56])

array([35, 56])すべての行と列の内積を計算せずに取得できる方法はありますか? ith rowつまりwithの内積ith column?

パフォーマンスの違いは、行列が大きくなるほど大きくなるためです。

4

2 に答える 2

5

これは、2D 配列の単なる行列乗算です。

C[i, j] = sum(A[i, ] * B[, j])

したがって、対角要素が必要なだけなので、後になっているように見えます

sum(A[i, ] * B[, i]) # for each i

したがって、リスト内包表記を使用できます。

[np.dot(A[i,:], B[:, i]) for i in xrange(A.shape[0])]
# [22, 64]

または、(これは が必要な場合にのみ機能するため、A の寸法が である場合、B の寸法は でdiagonalあると仮定します):n x mm x n

np.sum(A * B.T, axis=1)
# array([22, 64])

(ここでは派手な派手なトリックは行われておらず、数学をいじっているだけです)。

于 2012-11-20T01:04:12.330 に答える
0

気にしないパラメーターの行を単純に除外できますか?

2x3 x 3x2 は 2x2 の結果を与えます。

1x3 x 3x2 行列は、1x2 行列である [A][B] の一番上の行のみを提供します。

編集:質問を読み間違えました。それでも、行列の各値は、列と行の転置の積によって生成されます。

于 2012-11-20T01:02:34.290 に答える