3

私はマトリックスを持っています

A = [[ 1.  1.]
    [ 1.  1.]]

および 2 つの配列 (aおよびb)、すべての配列には 20 個の浮動小数点数が含まれています

( x'    = A * ( x )
  y' )          y   

これは正しいです?m = A * [a, b]

4

1 に答える 1

4

NumPy 配列を使用した行列乗算は、np.dotで実行できます。X形状が (i,j) でY形状が (j,k) の場合、np.dot(X,Y)は行列の積になり、形状は (i,k) になります。の最後の軸Xと の最後から 2 番目の軸Yが乗算され、合計されます。

ここで、が shapeaを持っている場合は、 shapeを持ちます:b(20,)np.vstack([a,b])(2, 20)

In [66]: np.vstack([a,b]).shape
Out[66]: (2, 20)

1 行目に の値、2 行目にnp.vstack([a, b])の値を持つ 2x20 行列と考えることができます。ab

形状が (2,2) であるためA、行列の乗算を実行できます。

m = np.dot(A, np.vstack([a,b]))

形状 (2, 20) の配列に到達します。の最初の行にmx'値が含まれ、2 番目の行にはy'値が含まれます。


NumPy には(特別な種類の NumPy 配列)のmatrixサブクラスもあり、2D 配列で行列の乗算を行うための便利な構文があります。(作成するプレーンではなく) とndarray定義Aすると、演算子を使用して行列の乗算を行うことができます。matrixndarraynp.array(...)*

以下に両方の方法を示します(Aプレーンndarrayであり、A2であるmatrix):

import numpy as np

A = np.array([[1.,1.],[1.,1.]])
A2 = np.matrix([[1.,1.],[1.,1.]])
a = np.random.random(20)
b = np.random.random(20)
c = np.vstack([a,b])

m = np.dot(A, c)
m2 = A2 * c

assert np.allclose(m, m2)
于 2013-09-18T20:45:42.143 に答える