我的数据文件部分看起来像
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:])
但这很慢。
任何提示?
答案 0 :(得分:1)
假设您刚刚使用了START
行,您可以尝试类似
>>> i = iter(file.__next__, 'END\n')
>>> 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
的开销是多少。
答案 1 :(得分:0)
首先,为什么需要从utf-8解码?您显示的数据暗示可能不需要。
想到的第二个想法是最后一行的数组切片。既然您已经检查过正好有4个项目,您打算跳过第一个项目,具体取决于numpy的工作方式,可以选择说:
data[k] = (float(parts[1]), float(parts[2]), float(parts[3]))