numpy.loadtxt 单行与多行输入

3 投票
2 回答
3629 浏览
提问于 2025-04-18 07:43

我有一个数据文件,里面可能有一行或多行数据。我用 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)

撰写回答