读取带有开始/结束标记的结构化数据



>我有一个数据文件部分,看起来像

START
vertex 266.36 234.594 14.6145
vertex 268.582 234.968 15.6956
vertex 267.689 232.646 15.7283
END
START
vertex 166.36 23.594 4.6145
vertex 8.582 23.968 5.6956
vertex 67.689 32.646 1.7283
END
# [...]

即三个"顶点"的块。我现在想尽快读取数据。到目前为止,我正在逐一浏览这些行,

data = numpy.empty((n, 3))
flt = numpy.vectorize(float)
for k in range(n):
parts = f.readline().decode('utf-8').split()
assert len(parts) == 4
assert parts[0] == 'vertex'
data[k] = flt(parts[1:])

但这很慢。

有什么提示吗?

假设您刚刚使用了START行,您可以尝试类似

>>> i = iter(file.__next__, 'ENDn')
>>> np.loadtxt(i, usecols=(1,2,3))
array([[266.36  , 234.594 ,  14.6145],
[268.582 , 234.968 ,  15.6956],
[267.689 , 232.646 ,  15.7283]])

我假设loadtxt相当快,但我不知道iter的开销是多少。

首先,为什么需要从utf-8解码?您显示的数据意味着可能不需要。

想到的第二个想法是最后一行的数组切片。由于您已经检查了正好有 4 个项目,您计划跳过其中的第一个项目,具体取决于 numpy 的工作方式,是否可以选择说:

data[k] = (float(parts[1]), float(parts[2]), float(parts[3]))

相关内容

  • 没有找到相关文章

最新更新