【发布时间】:2011-05-13 23:20:45
【问题描述】:
我正在解析一个数据文件,其中包含由 c++ 生成的以空格分隔的文本。一些驱动计算将溢出、下溢或生成 NaN。字符串“1.#INF00”和“1.#IND00”似乎没有被 numpy.array() 消化,返回“invalid literal for float()”错误。我尝试过这样的替换:
line = line.replace('1.#INF00','inf')
line = line.replace('1.#IND00','ind')
vals = line.split(' ')
myarray = array(vals)
但是,唉,无济于事。我也试过'nan'和'NaN'。是否有一些字符串我可以替换哪个 float() 将解释为 nan、inf 等?也许我需要在某些引号中转义?
顺便说一句,你能告诉我 matplotlib 将如何处理 inf 吗? 默认解决方案是在检测到它们时将它们更改为 NaN。 I have found it demonstrated matplotlib 将优雅地处理这些,在数据中留下空白。对于我的“inf”和“ind”来说,这是可以接受的治疗
【问题讨论】:
-
我在维护的这段代码中遗漏了一个项目。转换为数组是在与转换为数值不同的步骤中发生的,我错过了这个小宝石:float(x) if '.' in x else int(x),所以如果我在实验时更仔细地阅读错误,我会注意到当我 确实 进行替换时,它是转换为整数没有正确消化“inf”。
-
所以我在那个条件下添加了这个修改:(float(x) if '.' in x or 'nan' in x or 'inf' in x else int(x).
标签: python numpy matplotlib