2015-06-10 72 views
2

我正在为传统for循环中的嵌套矩阵赋值。在python中使用嵌套列表理解修改矩阵

matrix= [[0 for j in range(3)]for i in range(3)] 
    value = 10 
    #Setting value to a particular row in the matrix 
    for i in range(3): 
     if i == 2: 
      for j in range(3): 
       matrix[i][j] = 10 
    #Setting value to a particular column in the matrix 
    val = 20 
    for i in range(3): 
     for j in range(3): 
      if j == 1: 
       matrix[i][j] = 20 

是否可以在嵌套列表理解中对矩阵赋值? 我也试试这个:

   matrix = [[value for j in i if j == col ]for i in matrix] 

但它不修改矩阵,而是创建一个新的one.How我能做到这一点与嵌套列表内涵?

+0

'矩阵[:] = [[我中对于j值如果矩阵Ĵ==山坳]因为我]'会改变原来的列表,但我不认为你的例子是相同的 –

+1

有你尝试使用'numpy'? –

+0

我还没有,但会尽快试用。谢谢。 –

回答

4

你的例子可以很容易地使用numpy数组完成。

import numpy as np 
matrix = np.zeros((3,3)) 

# Setting a row 
matrix[1] = 10 

# Setting a column 
matrix[:,1] = 20 
0

下理解这项工作:

matrix= [ 
    [ 
     20 if j == 1 else 10 if i == 2 else 0 
     for j in range(3) 
    ] 
    for i in range(3) 
] 

它会产生:

[[0, 20, 0], [0, 20, 0], [10, 20, 10]] 

在您的解决方案,你不必做通过所有细胞去两次。

matrix = [[0 for j in range(3)] for i in range(3)] 
for i in range(3): 
    matrix[2][i] = 10 
    matrix[i][1] = 20 
+0

如果我想通过为特定行分配值来修改现有矩阵,该怎么办?据我所知,你的解决方案(列表理解)只是创建一个新的列表。如果我错了,请解释。 –

+0

我提出的列表理解是你应该做的唯一事情(没有'matrix = [[0对于范围(3)中的j']对于范围(3)中的i']')。列表理解将创建列表,但这将是您必须创建的唯一列表。如果你只想修改而不是看答案的第二部分(用for循环)。 – lukkol