迭代更新2维数组

时间:2014-04-16 02:50:57

标签: python arrays numpy iteration

嗨,基本上我有基本的文本文件:

3
1 0 1
0 1 0
1 1 1

我正在尝试创建一个包含整数值的二维数组 到目前为止我的代码是:

import numpy as np
f = open('perc.txt', 'r')
n = f.readline()
j = 0
dim = int(n.rstrip(' \n'))
mat = np.zeros((dim, dim))
for i in range(dim):
    n = f.readline()
    line = n.rstrip(' \n')
    line = line.split()
    line = map(int,line)
    while j < dim: 
        mat[i][j] = line[j]
        j += 1

但是当我运行代码时,结果是:

1 0 1
0 0 0
0 0 0

但是line当前是数组[(1,1,1)],所以很明显迭代的一部分正常工作。如何让矩阵正确更新值。

2 个答案:

答案 0 :(得分:0)

您需要在j循环之前将while重置为零。

答案 1 :(得分:0)

使用

with open(...) as outfile:
    #outfile.write()
    #outfile.read()
    #outfile.readlines()
    #etc

让文件自动关闭。它看起来更好,你不必记得关闭文件。

我只是阅读了整个内容并将字符串拆分为一个列表。然后我使用索引来创建数组。

arr = np.array([lines[1:])从第2个元素开始,在lines中为每个元素创建一个平面数组,因此我使用您在dim x dim函数中提供的resize来调整它的大小。 / p>

import numpy as np

lines = []

with open('perc.txt', 'r') as outfile:
    lines = outfile.read().split()

>>> print lines
>>> ['3', '1', '0', '1', '0', '1', '0', '1', '1', '1']

arr = np.array([lines[1:]])

dim = int(lines[0])

arr.resize(dim, dim)

>>> print arr
>>> [['1' '0' '1']
     ['0' '1' '0']
     ['1' '1' '1']]