【发布时间】:2015-10-29 05:27:29
【问题描述】:
我有一个文本文件,除其他数据外,它还包含以下形式的数据
215
1 0.0 0.0 0.0
[...]
9 -0.4330127018930699 0.2499999999985268 1.0
10 -0.1366025403783193 -0.03660254037890862 1.0
11 -0.2499999999985268 -0.4330127018930699 1.0
12 0.03660254037890862 -0.1366025403783193 1.0
13 0.4330127018930699 -0.2499999999985268 1.0
14 0.1366025403783193 0.03660254037890862 1.0
15 0.2499999999985268 0.4330127018930699 1.0
[...]
215 1.0 1.0 1.0
[...] # some more data, other format
即,
- 一个整数,指定即将到来的数据行数,
- N 行,一个整数后跟三个浮点数,
- 更多数据,格式不同。
我想将这些数据转换成一个 numpy 数组。由于我可以最好地使用生成器访问文件,numpy.fromiter() 就派上用场了。不过,我未能正确指定数据类型。这个
with open(filename) as f:
line = islice(f, 1).next()
num_nodes = int(line)
points = numpy.fromiter(
islice(f, num_nodes),
dtype=[('idx', int, 1), ('vals', float, 3)],
count=num_nodes
)
不工作。有什么提示吗?
【问题讨论】:
-
我建议
loadtxt或genfromtxt。使用dtype=None,他们将为您推断出 int v float。或尝试i,f,f,fdtype。您的 dtype 也可能有效。 -
我很难使用需要文件句柄的方法,因为该文件包含许多其他格式不同的数据。这就是我使用生成器 (
islice) 的原因。 -
genfromtxt接受任何可以一次输入一行的内容。为了测试,我经常使用字符串列表。生成器应该可以正常工作。
标签: python numpy file-io string-formatting