2013-10-27 4 views
1
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: неверный синтаксис

В частности, я пытаюсь заполнить нана в массиве с другим массивом одинаковой длиной:

[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 

Благодаря

+0

вы можете использовать 'np.nan_to_num (х)', где 'x' является желаемое число заменить' nan' ... –

+0

я не знаю, что функция, но он, кажется, заменяет нан нулями. Не все элементы выходного массива являются нулями. – Pedro9

ответ

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

Список понимание ничего не переуступать, он создает новый список, который вы можете затем использовать для заполнения 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.]) 
0

Почему бы вам не использовать:

for i in range(len(rte)): 
    yu[i] = rte[i] 
Смежные вопросы