substituir valores em uma matriz
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 ??p>
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