作者:海纳百川2602902033 | 来源:互联网 | 2023-08-16 10:24
我正在解析一个数据文件,其中包含从c生成的空白分隔文本.一些驱动计算将溢出,下溢或生成NaN.似乎字符串“1.#INF00”和“1.#IND00”没有被numpy.array()消
我正在解析一个数据文件,其中包含从c生成的空白分隔文本.一些驱动计算将溢出,下溢或生成NaN.似乎字符串“1.#INF00”和“1.#IND00”没有被numpy.array()消化,返回“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时将其更改为NaN. I have found it demonstrated matplotlib将优雅地处理这些,留下数据中的空白.这对我的’inf’和’ind’来说是可接受的治疗方法
解决方法:
float(‘nan’)应该返回NaN并且float(‘inf’)应该返回无穷大.至少这是他们如何使用我的翻译(CPython 2.7).在CPython 2.5中,某些平台(特别是在Windows上)的情况似乎有所不同,但我怀疑你是否使用了这样一个旧版本的Python.
也许问题是numpy,但在这种情况下你可以尝试:
line = line.replace('1.#INF00','inf')
line = line.replace('1.#IND00','nan')
vals = line.split(' ')
myarray = array([float(x) for x in vals])