用列表理解替换nan

时间:2013-10-27 14:32:33

标签: python numpy nan

yu = np.array([np.nan, np.nan, np.nan, np.nan, np.nan,])

rte = np.array([1,2,3,4,5])

yu[0] = rte[0]
yu # array([  1.,  nan,  nan,  nan,  nan])

还..

[yu[i] = rte[i] for i in range(len(rte))]

SyntaxError:语法无效

具体来说,我正在尝试用相同长度的其他数组填充数组中的nan:

[pred[first_c_rowNA, 0::][0::, wNA[0]][i] = output[i] for i in np.arange(len(output))]

SyntaxError:语法无效

pred[first_c_rowNA, 0::][0::, wNA[0]] # array([ nan,  nan,  nan, ...,  nan,  nan,  nan])

output # array([ 0.,  0.,  0., ...,  0.,  0.,  0.]) # not all are zeros

由于

3 个答案:

答案 0 :(得分:3)

为什么不能简单地说:

>>> import numpy as np
>>> rte = np.array([1,2,3,4,5])
>>> yu = np.array([np.nan, np.nan, np.nan, np.nan, np.nan,])
>>> yu[:] = rte

>>> yu
array([ 1.,  2.,  3.,  4.,  5.])

或者如果您需要纳米面膜:

yu[np.isnan(yu)] = values

例如:

>>> yu
array([ 0.20087116,         nan,  0.71742786,  0.05037165,  0.25646742,
               nan,  0.27702335,         nan,         nan,  0.62272575])

>>> yu[np.isnan(yu)] = np.random.rand(4)

>>> yu
array([ 0.20087116,  0.6701011 ,  0.71742786,  0.05037165,  0.25646742,
        0.63462273,  0.27702335,  0.01248758,  0.61178318,  0.62272575])

答案 1 :(得分:1)

列表理解不会分配任何内容,它会创建一个新列表,然后您可以使用它来填充numpy数组。但大多数情况下,使用numpy数组时最好使用切片:

>>> import numpy as np
>>> yu = np.array([np.nan, np.nan, np.nan, np.nan, np.nan,])
>>> rte = np.array([1,2,3,4,5])
>>> yu[:] = rte
>>> yu
array([ 1.,  2.,  3.,  4.,  5.])

答案 2 :(得分:0)

为什么不使用:

for i in range(len(rte)):
    yu[i] = rte[i]