【发布时间】:2019-09-24 18:43:15
【问题描述】:
我想读取一个数据文件,其中每一列由一个制表符分隔,每一行看起来像这样:
[475.407, 792.916] [893.258, 614.066] [461.864, 356.715] [758.244, 274.128]
目前,我使用 numpy.loadtxt 将此文件作为字符串读取,它工作正常:
data = np.loadtxt (filename, dtype=np.str, delimiter="\t")
但是我需要的是浮点数而不是字符串。我的预期输出是:
(np.float32, np.float32) (np.float32, np.float32) (np.float32, np.float32) (np.float32, np.float32)
所以我决定定义一个新的数据类型为 np.dtype("f4, f4") 以便每个元素被视为两个浮点数:
data = np.loadtxt (filename, dtype=np.dtype("f4, f4"), delimiter="\t")
这会导致以下错误:
ValueError: could not convert string to float: '[475.407, 792.916]'
问题
- 如何为 numpy.loadtxt 定义新的数据类型?
- 还有其他工具可以替代吗?
【问题讨论】:
-
您只是在这里使用了错误的工具。您似乎想要的数据类型实际上只是
np.float64。但这对您没有帮助,因为numpy.readtext只是一种非常愚蠢的便捷方法,用于加载简单的字符分隔字符串。 -
预期输出是什么?
-
@juanpa.arrivillaga 您是否建议使用其他工具,例如 genfromtext?
-
@DanielMesejo 我更新了问题。我想将每个元素 [x, y] 读取为浮点数而不是字符串。
-
@Ali 不,因为这本质上是等价的。我会建议从源头上解决问题:无论生成此文本,不要那样做,并使用预先构建的序列化格式。否则,我建议只是手动解析,您可以“作弊”并使用
ast.literal_eval。但实际上,你应该修复源代码