2

簡単にするために、行列の乗算のみを行う関数を定義しましょう。

f(matrix1, matrix2):
    #assume that matrix1.shape == np.transpose(matrix2).shape
    #both are 1 dimensional so this returns a scalar
    return matrix1 * matrix2 

ここで、合計を取得するためにこの関数を何度も実行したいとします
。--matrix1-毎回異なる--matrix2-毎回
同じ

forループを書くことができます:

matrix_a1 = np.matrix([1,2])
matrix_a2 = np.matrix([3,4])
matrix_list = [matrix_a1, matix_a2]
matrixb = np.matrix([5,6],[7,8])
total = 0
for matrix in matrix_list
    total+= f(matrix, matrixb)

私はそれをこのように書きたいです:

sum(f(matrix_list, matrixb))

ただし、matrix_listを反復処理する代わりに、matrix_listとmatrixbの間で行列の乗算を実行しようとするため、これは機能しません。

numpyを使用してmatrix_listを反復処理するにはどうすればよいですか?

4

1 に答える 1

0

行列のリストを多次元配列に変換します。

オブジェクトの快適さから抜け出し、matrixプレーンな配列を使用すると、これは簡単になります。最初の関数は、2つの配列が与えられた場合、次のように書き直すことができますnp.dot

def f(array1, array2) :
    return np.dot(array1, array2)

これで、次のことができます。

>>> array_a1 = np.array([1, 2])
>>> array_a2 = np.array([3, 4])
>>> array_a = np.array([array_a1, array_a2])
>>> array_a
array([[1, 2],
       [3, 4]])
>>> array_b = np.array([[5, 6], [7, 8]])
>>> array_b
array([[5, 6],
       [7, 8]])
>>> f(array_a, array_b)
array([[19, 22],
       [43, 50]])
>>> np.sum(f(array_a, array_b), axis=0)
array([62, 72])

あなたもすることができます:

>>> array_a1 = np.array([[1, 2], [3, 4]])
>>> array_a2 = np.array([[5, 6], [7, 8]])
>>> array_a = np.array([array_a1, array_a2])
>>> array_b = np.array([[9, 10], [11, 12]])
>>> np.sum(f(array_a, array_b), axis=0)
array([[142, 156],
       [222, 244]])
于 2013-03-06T19:09:14.403 に答える