2015-04-03 24 views
1

我想要一個矩陣陣列中,以迭代地相乘的乘法矩陣的刪除和在矩陣乘法Python語言插入值

matrix[0] = [[1,2,3,4], [1,2,3,4], [1,2,3,4], [1,2,3,4]] 
matrix[1] = [[1,2,3,4], [1,2,3,4], [1,2,3,4], [1,2,3,4]] 
matrix[3] = [[1,2,3,4], [1,2,3,4], [1,2,3,4], [1,2,3,4]] 
matrix[4] = [[1,2,3,4], [1,2,3,4], [1,2,3,4], [1,2,3,4]] 
matrix[5] = [[1,2,3,4], [1,2,3,4], [1,2,3,4], [1,2,3,4]] 
matrix[6] = [[1,2,3,4], [1,2,3,4], [1,2,3,4], [1,2,3,4]] 

結果[0]和矩陣[1]將乘法到的下一個陣列矩陣,矩陣[3]。這個結果會再次與下一個結果相乘。該過程應該按順序進行。 任何想法或解決方案?由於

+1

如果你想在Python中乘數組,無論是元素式還是線性代數式矩陣乘法,都應該使用'numpy'。 – Marius 2015-04-03 02:03:52

+0

[如果你不着急,Python 3.5會爲矩陣乘法添加'@'運算符](https://www.python.org/dev/peps/pep-0465/)。 – TigerhawkT3 2015-04-03 02:05:30

+0

@ TigerhawkT3我知道這是被引入的,但是這實際上是在香草Python中爲列表列表工作,還是它只是可用於'numpy'等? – Marius 2015-04-03 02:13:38

回答

0

什麼你所描述的是一個reduce操作:

Python 2.7: built-in functions: reduce

假設你定義了這個矩陣乘法功能:

def multiply(a, b): 
    num_r, num_c, num_i = len(a), len(b[0]), len(a[0]) 
    m = [num_c * [None] for r in range(num_r)] 
    for r in range(num_r): 
     for c in range(num_c): 
      x = 0 
      for i in range(num_i): 
       x += a[r][i] * b[i][c] 
      m[r][c] = x 
    return m 

而且你有矩陣這個名單:

matrices = [[[1,2,3,4], [1,2,3,4], [1,2,3,4], [1,2,3,4]], 
      [[1,2,3,4], [1,2,3,4], [1,2,3,4], [1,2,3,4]], 
      [[1,2,3,4], [1,2,3,4], [1,2,3,4], [1,2,3,4]], 
      [[1,2,3,4], [1,2,3,4], [1,2,3,4], [1,2,3,4]], 
      [[1,2,3,4], [1,2,3,4], [1,2,3,4], [1,2,3,4]], 
      [[1,2,3,4], [1,2,3,4], [1,2,3,4], [1,2,3,4]]] 

Now you ca n,其中一個電話乘以矩陣在序列reduce

print reduce(multiply, matrices) 
+0

我有另一個答案如下,但似乎你的解決方案比我想的更實際(更好)。謝謝 – 2015-04-03 03:45:36

+0

它根據我上面的問題使用矩陣格式時給了我一個錯誤。錯誤是,錯誤是num_r,num_c,num_i = len(a),len(b [0]),len(a [0]) TypeError:int類型的對象沒有len()。 – 2015-04-03 05:22:09

+0

'multiply'的每個參數必須是一個二維數組。顯然你傳遞給它一個一維數組。 – 2015-04-03 05:26:16

0

我上心(操作*是矩陣multplication過程的簡單化):

for i in range(6): 
    A = matrix[i] 
    B = matrix[i+1] 
    C = A * B 
    matrix [i+1] = C 
return C 

讓我知道是否有其他更好的辦法去做吧。謝謝