Je souhaite diviser un tableau J'ai regardé le masquage booléen, mais cela prendrait plusieurs lignes, car je devrais masquer Je pourrais jurer que j'ai vu une telle fonction mais je ne le trouve plus. P> numérateurs code> par un tableau dénominateurs code>, mais certains éléments dans dénominateurs code> peuvent être zéro. L'élément résultant de ces indices devrait également être nul. Existe-t-il une fonction dans Numpy qui choisit des éléments de numérateurs / dénominateurs code> où dénominateurs code> n'est pas zéro et d'un tableau de zéro sinon? P>
dénominateurs code> afin de ne pas obtenir d'erreurs de division par zéro, ainsi que du résultat dans l'ordre mettre ces éléments à zéro. p>
3 Réponses :
np.where(denominators!=0,nominators/denominators,0)
La version "plus compacte" augmentera l'erreur
Pour nominateurs = np.array ([1, 2, 3, 4, 5]) code> et dénominateurs = np.array ([1, 0, 2, 0, 5]) Code> Il renvoie tableau ([1., 0. 5,5, 0., 1.]) code>. Je viens de l'essayer littéralement.
Sans aucun avertissement? Parce que tout cela est inutile et vous pouvez simplement faire nominateurs / dénominateurs code>
Avec RuntiMewarning. Mais ce n'est pas une erreur, et cela renvoie le résultat souhaité.
Oui, mais op demande spécifiquement de ne pas le faire.
simplement nominateurs / dénominateurs code> retours tableau ([1., INF, 1.5, INF, 1.]) code> Ce qui n'est pas ce que OP veut obtenir, autant que je sache le question.
Ok, je reçois ton point. Je laisserai la deuxième approche avec une note adéquate cependant.
Jetez un coup d'œil à Vous pouvez utiliser le Vous pouvez également créer un tableau de zéros ( np.divide < / code> . Vous pouvez utiliser une condition sur votre tableau de dénominateur dans le où code> paramètre pour mettre une condition sur la division: où = dénominateurs! = 0 code>. Cela gardera la valeur du premier tableau, cependant. p>
où code> paramètre tous ensemble, qui donne un avertissement et un 0 à la place où le dénominateur était 0. P>
np.zeros (forme) code>) et donner cela comme une matrice à laquelle la méthode code> diviser code> doit écrire son résultat. En combinaison avec le paramètre où code>, cela donnera le résultat correct sans avertissement. P>
Le paramètre de l'ufunc n'est pas une lambda
Ah merci @Madphysicist, a changé ma réponse.
Vous voudrez ! = 0 code> négatif est ok
De retour! : p
Vous avez un certain nombre d'options disponibles:
ufuncs comme Utilisez des tableaux masqués: P>
Utilisez le masquage à la main. Ce sera plus d'une ligne, mais vous pouvez le transformer en fonction d'utilisation future: p>
np.divide code> prend en charge un où code> masque à la version numpie 1.7: p>
quotients = np.empty(np.broadcast(numerators, denominators).shape)
mask = ~denominators
quotients[mask] = numerators[mask] / denominators[mask]
quotients[mask] = 0
quotients = np.zeros(np.broadcast(numerators, denominators).shape)
mask = ~denominators
quotients[mask] = numerators[mask] / denominators[mask]
np.where code>?NP.Où et np.divide ont des problèmes; Reportez-vous à ceci Stackoverflow .com / questions / 26248654 / ... pour une réponse