Python I';I’我想从列表中创建一个数组,但保留NAN和INF 我分析了一个数据文件,它包含了由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)

Python I';I’我想从列表中创建一个数组,但保留NAN和INF 我分析了一个数据文件,它包含了由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),python,numpy,matplotlib,Python,Numpy,Matplotlib,但是,唉,没有用。我也试过“nan”和“nan”。是否有一些字符串可以替换,哪个float()将解释为nan、inf等?也许我需要用一些引语来逃避 另外,你能告诉我matplotlib将如何处理inf吗? 默认的解决方案是在检测到它们时将它们更改为NaN。matplotlib将优雅地处理这些数据,在数据中留下空白。对于我的'inf'和'ind'来说,这是可以接受的处理方法。float('nan')应该返回nan,float('inf')应该返回无穷大。至少我的解释器(CPython2.7)就是这

但是,唉,没有用。我也试过“nan”和“nan”。是否有一些字符串可以替换,哪个float()将解释为nan、inf等?也许我需要用一些引语来逃避

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

float('nan')
应该返回nan,
float('inf')
应该返回无穷大。至少我的解释器(CPython2.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])

或者,您可以只调用
numpy.genfromtxt
并使用
缺少的\u值

e、 g.将此数据保存为
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
您可以这样做(在这种特殊情况下,我们需要将注释标识符设置为默认“#”以外的值):

这将产生:

array([[ 1. ,  0.2,  0.3,  nan],
       [ 2. ,  0.5,  0.6,  0.7],
       [ 3. ,  nan,  0.1,  0.2],
       [ 4. ,  0.4,  0.4,  0.5],
       [ 5. ,  0.5,  0.5,  0.7]])

比我快<代码>映射(float,vals)
应该更好。在做了上述更改后,我将#1.#IND00上的替换改为“nan”,这很有效。显然,对于“ind”没有任何解释,我在维护的这段代码中遗漏了一项。到数组的转换是在一个单独的步骤中进行的,与到数值的转换不同,我错过了这个小宝石:float(x)if'.'在x else int(x)中,因此如果我在实验时更仔细地阅读错误,我会注意到当我进行替换时,正是转换成整数的过程没有正确地分解'inf'。因此我对该条件进行了修改:(x中的float(x)if'.'或x中的'nan'或x中的'inf'else int(x)。
array([[ 1. ,  0.2,  0.3,  nan],
       [ 2. ,  0.5,  0.6,  0.7],
       [ 3. ,  nan,  0.1,  0.2],
       [ 4. ,  0.4,  0.4,  0.5],
       [ 5. ,  0.5,  0.5,  0.7]])