2016-05-15 12 views
1

は行列の乗算について質問しましたが、hereが見つかりましたが、行列を乗算することについてもう1つ質問があります。私は、次の行列を持って言う:Python行列の乗算のバリエーション

私はこのような結果を得ることができますどのように
matrix_a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] 

matrix_b = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] 

[[1, 4, 9], [16, 25, 36], [49, 64, 81]] 

...各要素は基本的に他の配列の1つの対応する要素で乗算されているように、 。誰もそれを行う方法を知っていますか?

ありがとうございました!

+1

あなたがnumpyのを使用していない理由はありますか? – mtrw

答えて

2

あなたはlist comprehensionszip、及び* argument-unpacking operatorを使用して要素毎積(および行列積)を発現することができ:

matrix_a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]  
matrix_b = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] 

elementwise_product = [[ai*bi for ai, bi in zip(*rows)] 
         for rows in zip(matrix_a, matrix_b)]  
print(elementwise_product) 
# [[1, 4, 9], [16, 25, 36], [49, 64, 81]] 

matrix_product = [[sum([ai*bi for ai, bi in zip(row_a, col_b)]) 
        for col_b in zip(*matrix_b)] 
        for row_a in matrix_a] 
print(matrix_product) 
# [[30, 36, 42], [66, 81, 96], [102, 126, 150]] 
+0

これは素晴らしいです!助けてくれてありがとう! – Jaromjj

0

numpyのパッケージは、両方の要素単位及びマトリックス - を行うことができ、配列オブジェクトを提供賢明な計算:

import numpy as np 
matrix_a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) 
matrix_b = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) 

matrix_a*matrix_b 
np.dot(matrix_a, matrix_b) 

この出力:

array([[ 1, 4, 9], 
     [16, 25, 36], 
     [49, 64, 81]]) 

array([[ 30, 36, 42], 
     [ 66, 81, 96], 
     [102, 126, 150]]) 

Numpyは、pip install numpyを使用するか、anacondaやpythonxyなどの数値的なPythonディストリビューションのいずれかを使用して入手できます。

0

これらのリストは等しいので、それだけでそれを掛けることができます。ここでは、行列を反復して結果を新しいものに格納する、やや冗長な方法があります。

matrix = [[1,2,3],[4,5,6],[7,8,9]] 

result_matrix = [[],[],[]] 

print (matrix) 

for i in range(0, len(matrix)): 
    for j in range(0,len(matrix[i])): 
     result_matrix[i].append(matrix[i][j] * matrix[i][j]) 
print (result_matrix) 

出力リレー

[[1, 2, 3], [4, 5, 6], [7, 8, 9]] 
[[1, 4, 9], [16, 25, 36], [49, 64, 81]]