2014-03-30 66 views
4

我是python 3.4的新手,我通常使用MATLAB/GNU Octave進行矩陣計算。我知道我們可以在Python 2.x中使用numpy進行矩陣計算,但numpy不適用於python 3.4。如何在Python 3.4中輸入矩陣(2D列表)?

我試着創建這個代碼來輸入一個m乘n的矩陣。我打算輸入[[1,2,3],[4,5,6]],但代碼產生[[4,5,6],[4,5,6]。當我輸入其他m乘n矩陣時,同樣的事情發生,代碼產生一個m乘n矩陣,其行是相同的。

也許你可以幫我找出我的代碼有什麼問題。

m = int(input('number of rows, m = ')) 
n = int(input('number of columns, n = ')) 
matrix = []; columns = [] 
# initialize the number of rows 
for i in range(0,m): 
    matrix += [0] 
# initialize the number of columns 
for j in range (0,n): 
    columns += [0] 
# initialize the matrix 
for i in range (0,m): 
    matrix[i] = columns 
for i in range (0,m): 
    for j in range (0,n): 
    print ('entry in row: ',i+1,' column: ',j+1) 
    matrix[i][j] = int(input()) 
print (matrix) 

回答

7

問題出在初始化步驟。

for i in range (0,m): 
    matrix[i] = columns 

此代碼實際上使每一行的matrix指同一columns對象。如果任何列改變任何項目 - 每隔一列將發生變化:使用

matrix = [] 
for i in range(0,m): 
    matrix.append([]) 
    for j in range(0,n): 
     matrix[i].append(0) 

,或者在一個班輪:

>>> for i in range (0,m): 
...  matrix[i] = columns 
... 
>>> matrix 
[[0, 0, 0], [0, 0, 0]] 
>>> matrix[1][1] = 2 
>>> matrix 
[[0, 2, 0], [0, 2, 0]] 

您可以在嵌套循環初始化矩陣,這樣列表理解:

matrix = [[0 for j in range(n)] for i in range(m)] 

或:

matrix = [x[:] for x in [[0]*n]*m] 

參見:

希望有所幫助。

2

你能接受在python二維列表這樣...

簡單

arr2d = [[j for j in input().strip()] for i in range(n)] 
# n is no of rows 


的字符

n = int(input().strip()) 
m = int(input().strip()) 
a = [[0]*n for _ in range(m)] 
for i in range(n): 
    a[i] = list(input().strip()) 
print(a) 

n = int(input().strip()) 
n = int(input().strip()) 
a = [] 
for i in range(n): 
    a[i].append(list(input().strip())) 
print(a) 

的號碼

n = int(input().strip()) 
m = int(input().strip()) 
a = [[0]*n for _ in range(m)] 
for i in range(n): 
    a[i] = [int(j) for j in input().strip().split(" ")] 
print(a) 

其中n是列中元素的數量,而m是行中元素的數量。

在Python的方式,這將創建的目錄列表

0

除了接受的答案,您還可以初始化以下方式你行 - matrix[i] = [0]*n

因此,下面的一段代碼將起作用 -

m = int(input('number of rows, m = ')) 
n = int(input('number of columns, n = ')) 
matrix = []; columns = [] 
# initialize the number of rows 
for i in range(0,m): 
    matrix += [0] 
# initialize the matrix 
for i in range (0,m): 
    matrix[i] = [0]*n 
for i in range (0,m): 
    for j in range (0,n): 
     print ('entry in row: ',i+1,' column: ',j+1) 
     matrix[i][j] = int(input()) 
print (matrix)