numpy.loadtxt 单行与多行输入
我有一个数据文件,里面可能有一行或多行数据。我用 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 单行/行作为列表,但是我没有成功。
我添加了:
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 个回答
2
你可以使用 np.atleast_1d
这个函数,把它提升到一维以上:
>>> 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
。
7
试试这个:
data1=numpy.loadtxt ( 'file1', unpack=True, ndmin = 1)