【发布时间】:2018-10-29 18:37:02
【问题描述】:
我有一个数据文件部分看起来像
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:])
但这很慢。
有什么提示吗?
【问题讨论】:
-
loadtxt(和genfromtxt)逐行读取文件,并在列表列表中收集拆分字符串。数组最后构造一次。 -
data初始化为 dtype float,data[k] = parts[1:]应该可以工作。numpy将在赋值期间将字符串转换为浮点数。
标签: python numpy io genfromtxt