2015-06-10 99 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