我想从列表中创建一个数组,但是保留nan和inf

2024-10-02 22:25:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在分析一个包含由c++生成的空白分隔文本的数据文件。一些驱动计算将溢出、下溢或生成NaN。似乎字符串“1.#INF00”和“1.#IND00”没有被消化数字阵列(),返回“float()的文本无效”错误。我尝试过这样的替代品:

line = line.replace('1.#INF00','inf')
line = line.replace('1.#IND00','ind')
vals = line.split(' ')
myarray = array(vals)

但是,唉,无济于事。我也试过“楠”和“楠”。有没有什么字符串可以替换成float()将解释成nan、inf等?也许我需要用一些引语来逃避?在

另外,你能告诉我matplotlib如何处理inf吗? 默认的解决方案是在检测到它们时将它们更改为NaN。I have found it demonstratedmatplotlib将优雅地处理这些,在数据中留下空白。这对我的inf和ind是可以接受的治疗


Tags: 字符串文本数据文件错误line数字nanfloat
2条回答

float('nan')应返回NaN,float('inf')应返回无穷大。至少他们在我的解释器(cpython2.7)上就是这样工作的。在cpython2.5中,某些平台(尤其是Windows)的情况似乎有所不同,但我怀疑您使用的是这么旧的Python版本。在

也许问题出在纽比身上,但在这种情况下,你可以试试:

line = line.replace('1.#INF00','inf')
line = line.replace('1.#IND00','nan')
vals = line.split(' ')
myarray = array([float(x) for x in vals])

或者,您可以调用numpy.genfromtxt并使用missing_valueskwarg。在

例如,将此数据另存为data.txt

1 0.2 0.3 1.#INF00
2 0.5 0.6 0.7
3 1.#IND00 0.1 0.2
4 0.4 0.4 0.5
5 0.5 0.5 0.7

您可以这样做(在这种情况下,我们需要将注释标识符设置为默认的“#”之外的值):

^{pr2}$

这就产生了:

^{3}$

相关问题 更多 >