2010-06-08 178 views
2

我對Python非常陌生,我需要從文件中讀取數字並將它們存儲在矩陣中,就像在Fortran或C中一樣;Python中的矩陣

for i 
    for j 
    data[i][j][0]=read(0) 
    data[i][j][1]=read(1) 
    data[i][j][2]=read(2) 
... 
... 

我該怎麼在Python中做同樣的事情?我看了一下,但與元組和類似的東西

糊塗了。如果你能指出我有類似的例子,那就太棒

感謝

回答

4

Python不附帶多維數組,但你可以通過彈出添加它們ular numpy第三方軟件包。如果你想避開第三方軟件包,你會在Python中做的是使用一系列列表(每個「列表」是一維「向量狀」序列,可以存放任何類型的項目)。

例如:

data = [ [ [0 for i in range(4)] for j in range(5)] for k in range(6)] 

這使得6個項目其中有5項其中4個0的名單列表清單 - 即6×5×4「的3D矩陣」,你可能然後針對你所希望的方式,

for i in range(6): 
    for j in range(5): 
    data[i][j][0]=read(0) 
    data[i][j][1]=read(1) 
    data[i][j][2]=read(2) 

前三四個項目上的每個最嵌套子列表與想必你想自己寫調用那個神祕的功能read初始化(我不知道那是什麼應該這樣做 - 自從我「不讀」並返回下一個數字t需要一個神祕的論證,但是,那又如何?)。

+4

代替[0代表範圍(n)中的i]]應該使用[0] * n – unbeli 2010-06-08 18:12:37

+3

@unbeli,s/should/could/- '[0] * n'更快但引入了不對稱證明對一個新手非常混亂,並誘使他們在其他地方(除了最深層之外的任何層)使用這種複製,這將是一場徹底的災難。我非常有意識地選擇了更規則和完全對稱的方法,相信我 - 在矩陣初始化時一次性節省幾微秒不值得添加新手的迷失方向;-)。 – 2010-06-08 21:21:26

0

一個簡單的例子是:

data = [] 
with open(_filename_, 'r') as f: 
    for line in f: 
     data.append([int(x) for x in line.split()]) 
0

矩陣是二維結構。在普通的Python中,矩陣的最自然的表示就是列表的列表。

所以,你可以寫一個行矩陣爲:

[[1, 2, 3, 4]] 

,寫一個列矩陣爲:

[[1], 
[2], 
[3], 
[4]] 

這很好地延伸到MXN矩陣,以及:

[[10, 20], 
[30, 40], 
[50, 60]] 

有關如何開發af的示例,請參閱matfunc.py純Python中的矩陣包。 它的文檔是here

這裏是用列表中,列出了表示在普通的Python做矩陣乘法的採空例如:

>>> from pprint import pprint 
>>> def mmul(A, B): 
     nr_a, nc_a = len(A), len(A[0]) 
     nr_b, nc_b = len(B), len(B[0]) 
     if nc_a != nr_b: 
      raise ValueError('Mismatched rows and columns') 
     return [[sum(A[i][k] * B[k][j] for k in range(nc_a)) 
       for j in range(nc_b)] for i in range(nr_a)] 

>>> A = [[1, 2, 3, 4]] 
>>> B = [[1], 
     [2], 
     [3], 
     [4]] 

>>> pprint(mmul(A, B)) 
[[30]] 

>>> pprint(mmul(B, A), width=20) 
[[1, 2, 3, 4], 
[2, 4, 6, 8], 
[3, 6, 9, 12], 
[4, 8, 12, 16]] 

正如另一位受訪者提到,如果你認真做基質的工作,它你應該安裝numpy,它可以直接支持許多矩陣操作:

0

一種擴展表單以像矩陣一樣工作的方式。我已經通過python中的其他矩陣代碼,所有使用comprehensions首先初始化所需大小的列表,然後更新值(這需要更多時間)。
設r代表行,c代表列。

r = input('Enter row size: ') c = input('Enter column size: ') m = [] for i in range(r): m.append([]) for j in range(c): m[i].append(input()) for i in m: print i

在這裏,可以輸入矩陣的元素,因爲它是在「C」或等效的語言。希望這可以幫助某人對實現矩陣有不同的看法。