numpy.loadtxt用于一个或多个输入行

时间:2014-05-27 15:41:11

标签: python python-2.7 numpy

我有一个数据文件,可能是一行或多行。我用numpy.loadtxt读了它。这具有使我的单行数据成为标量的功能。这是有问题的,因为我想在读入后使用循环。请参阅下面的示例

$ cat file1
1
$ cat file2
1
2
$ python --version
Python 2.7.6
$ python 
$ python temp.py 
1.0
2.0
Traceback (most recent call last):
  File "temp.py", line 9, in <module>
    for x in data1:
TypeError: iteration over a 0-d array

代码

import numpy

data1=numpy.loadtxt ( 'file1', unpack=True )
data2=numpy.loadtxt ( 'file2', unpack=True )

for x in data2:
    print x

for x in data1:
    print x

我也尝试过相关问题的解决方案:numpy loadtxt single line/row as list但我不能让它工作

我添加了

data1 = data1 if usi.shape else [data1]

然而,

$ python temp.py 
Traceback (most recent call last):
  File "temp.py", line 7, in <module>
    data1 = data1 if usi.shape else [data1]
NameError: name 'usi' is not defined

我也试过了import usi,但是我的系统上没有安装它,对于这么简单的任务来说似乎有点过头了。

我做错了什么?我觉得解决方案很简单,但我找不到http://docs.scipy.org/doc/numpy/reference/generated/numpy.loadtxt.html

的提示

2 个答案:

答案 0 :(得分:7)

尝试:

data1=numpy.loadtxt ( 'file1', unpack=True, ndmin = 1)

答案 1 :(得分:2)

您可以致电np.atleast_1d将其推广到0-d对象之外:

>>> np.loadtxt("file1.txt")
array(1.0)
>>> np.atleast_1d(np.loadtxt("file1.txt"))
array([ 1.])

你也可以安全地应用于第二个数组,因为它不会做任何事情:

>>> np.loadtxt("file2.txt")
array([ 2.,  3.])
>>> np.atleast_1d(np.loadtxt("file2.txt"))
array([ 2.,  3.])

另见np.atleast_2d