Je veux optimiser une fonction numpue pour remplir une partie d'un tableau. Il faut un 1D à partir de ceci: p> Je veux obtenir ceci: p> autre valeurs manquantes "interne" devrait rester intacte, je les traiterai différemment. p> Quelle est la façon la plus pythonique de le faire? P> p> np.array () code> avec nan code> s à l'intérieur. Certains d'entre eux sont tous du côté gauche, et je veux juste eux em> pour être rempli de zéros. Exemple:
3 Réponses :
Essayez: sorties: p>
Solution similaire Comme ci-dessus, en utilisant np.min code> et np.where code> au lieu de max code> et np.argmax code >. import numpy as np
x = np.array([ np.nan, np.nan, np.nan, 3, 4, 5, np.nan, 7, 8, 9, np.nan ])
x[0:np.min(np.where(~np.isnan(x)))] = 0
J'ai aussi trouvé une solution moi-même:
def left_zero_fill(x):
if np.isfinite(x[0]): return x
cumsum = np.cumsum(np.isnan(x))
x[ :np.argmax(cumsum[:-1]==cumsum[1:]) +1] = 0
return x
Peut-être que le meilleur moyen est de le faire tout en "traitement des valeurs manquantes internes". Mais cela dépend de ce que ce traitement est exactement.
Oui, mon problème est de savoir comment le faire sans utiliser des boucles ni de la même manière "lente". Je dois traiter beaucoup de données et je veux réduire les temps de calcul.
Bien sûr, c'est une excellente idée. Mais la meilleure façon peut encore être de le faire lors du traitement des autres valeurs. Difficile de dire si nous ne savons pas ce que ce "traitement" est exactement.
Oh, j'utilise une technique d'imputation basée sur mon analyse statistique actuelle. Mais c'est complètement sans rapport avec ce remplissage zéro que je veux sur la gauche. Ce sont des données de séries chronologiques, je sais avec certitude que les Nan à gauche sont là car certaines tendances ont commencé plus tard, tandis que les Nan de la tendance sont un autre type de données manquantes nécessitant une imputation statistique. Mais ce n'est pas lié à ma question.