分割线并将数字添加到numpy数组

时间:2016-07-28 18:46:09

标签: python arrays python-3.x numpy

我在文件夹中有几个文本文件,所有文本文件都以数字形式存在,每个文件由3个空格分隔。没有换行符。我想取数字,将它们按顺序排列在一个numpy数组中,然后将其重新整形为240 x 240阵列。 (我在每个文件中都有正确数量的数据点。)之后,我希望它以图形方式显示我的数组,然后对下一个文件执行相同操作。但是,我的尝试不断给出我的错误:

"'unicodeescape' codec can't decode bytes in position 10-11: malformed \N character escape." 

到目前为止我的代码是:

import numpy as np
import matplotlib.pyplot as plt
a = np.array([])
import glob, os
os.chdir("/mydirectory")
for file in glob.glob("*.txt"):
    for line in file:
        numbers = line.split('   ')
        for number in numbers:
            a.np.append([number])
    b = a.reshape(240,240)
    plt.imshow(b)
    a = np.array([])

1 个答案:

答案 0 :(得分:2)

听起来像是一个读取其中一个文件的数字。我建议先做一个

 lines = file.readlines()

并确保线条看起来正确。您可能还想添加strip

In [244]: [int(x) for x in '121  342  123\n'.strip().split('  ')]
Out[244]: [121, 342, 123]

但是这种循环结构也很糟糕。这是对np.append

的误用
a = np.array([])
....
for number in numbers:
    a.np.append([number])

In [245]: a=np.array([])
In [246]: a.np.append(['123'])
...
AttributeError: 'numpy.ndarray' object has no attribute 'np'

In [247]: a.append(['123'])
...
AttributeError: 'numpy.ndarray' object has no attribute 'append'

In [248]: np.append(a,['123'])
Out[248]: 
array(['123'], 
      dtype='<U32')
In [249]: a
Out[249]: array([], dtype=float64)

np.append返回一个新数组;它不会改变a inplace。

您想要在列表(或列表列表)中收集值,或者至少将整数列表传递给np.array

In [250]: np.array([int(x) for x in '121  342  123\n'.strip().split('  ')])
Out[250]: array([121, 342, 123])