2010-06-08 137 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”或等效的语言。希望这可以帮助某人对实现矩阵有不同的看法。