Pergunta

como um valor de substituição para outra dentro de uma operação com matrizes, ou como procurar dentro de uma matriz e substituir um valor por outro

Por exemplo:

array ([[NaN, 1., 1., 1., 1., 1., 1.]
       [1., NaN, 1., 1., 1., 1., 1.]
       [1., 1., NaN, 1., 1., 1., 1.]
       [1., 1., 1., NaN, 1., 1., 1.]
       [1., 1., 1., 1., NaN, 1., 1.]
       [1., 1., 1., 1., 1., NaN, 1.]
       [1., 1., 1., 1., 1., 1., NaN]])

onde ele pode substituir NaN por 0. Obrigado por qualquer resposta

Foi útil?

Solução

Você pode fazer isso:

import numpy as np
x=np.array([[np.NaN, 1., 1., 1., 1., 1., 1.],[1., np.NaN, 1., 1., 1., 1., 1.],[1., 1., np.NaN, 1., 1., 1., 1.], [1., 1., 1., np.NaN, 1., 1., 1.], [1., 1., 1., 1., np.NaN, 1., 1.],[1., 1., 1., 1., 1., np.NaN, 1.], [1., 1., 1., 1., 1., 1., np.NaN]])
x[np.isnan(x)]=0

np.isnan(x) retorna uma matriz booleana que é True onde quer x é NaN. x[ boolean_array ] = 0 emprega fantasia indexação para atribuir o valor 0 sempre que a matriz booleana é True.

Para uma excelente introdução à fantasia indexação e muito mais, consulte também o numpybook .

Outras dicas

estes dias, há a função especial:

a = numpy.nan_to_num(a)

Aqui está o exemplo de matriz no pergunta:

import numpy as np
a = np.where(np.eye(7), np.nan, 1)

Você pode usar numpy.where e numpy.isnan funções para criar uma nova matriz b:

b = np.where(np.isnan(a), 0, a)

Ou usar uma função no local para modificar diretamente a matriz a:

np.place(a, np.isnan(a), 0)  # returns None
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top