2015-04-03 20 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 

让我知道是否有其他更好的办法去做吧。谢谢