J'essaie d'écrire un script qui simule un système de réactions chimiques au fil du temps. L'une des entrées de la fonction est le tableau suivant: qui contient le nombre de molécules discrètes de chaque espèce dans le système. Une partie de la fonction principale a un J'ai utilisé le Je viens de courir le programme et le numéro final des molécules, le système renvoyé était: Toute suggestion? P> acclamations p> p> si code> instruction destinée à vérifier que le nombre de molécules est positif.
si code> est traité à la prochaine itération,
else code> sortir de toute la simulation p>
. Nan () code> Pour essayer de trouver si un élément du tableau
popul_num code> est négatif. Mais cela ne fonctionne pas, il ne jette pas une erreur, le système ne pénètre jamais dans la déclaration IF et je ne peux pas comprendre pourquoi? P>
[135 -19 65 54] code> Le programme aurait dû démarquer avant que le deuxième élément ne soit arrivé à -19. p>
5 Réponses :
tout () code> est une méthode d'utilisation sur itterables. Il renvoie
vrai code> si l'un des éléments de l'iTHEREFT est en vérité. Vous voulez quelque chose de plus comme:
if any([True for x in popul_num if x > 0]):
print("at least one element was greater than zero!")
tout () fort> retour vrai em>, si au moins l'un des éléments est vrai em>:
Tout () renvoie true si au moins un élément d'une matrice numpue évalue en true et np.all Testez si tous les éléments de tableau le long d'un axe donné évaluent à vrai. Ce dont vous avez besoin pour résoudre votre problème est la totalité de votre problème. P>
Vous devez utiliser En fait, Vous pouvez faire: p> ici Vous êtes, cependant, correct d'utiliser Il y a aussi de la même manière . Nan () code> sur une matrice booléenne après em> faire la comparaison, pas sur les valeurs de
popul_num code> eux-mêmes. Il retournera
true code> si l'une des valeurs de la matrice booléenne est
true code>, sinon
false code>.
. tout () code> tests pour n'importe quel " Truthy " valeurs, que pour les entiers signifie des valeurs non nulles, il fonctionnera donc sur une gamme d'entiers à tester si l'un d'entre eux ne sont pas nuls, ce que vous faites, ce que vous faites, mais Cela ne teste pas la chose qui vous intéresse de savoir. Le code suscite ensuite le problème en effectuant un test
<0 code> sur la valeur booléenne renvoyée par
tout code>, qui évalue toujours
vrai code> car les valeurs booléennes sont traitées. comme
0 code> et
1 code> (pour
false code> et
vrai code> respectivement) dans les opérations impliquant des entiers. P>
popul_num <0 code> est une matrice booléenne contenant les résultats des comparaisons d'éléments par éléments. Dans votre exemple: P>
array.ca () code> (ou
np.any (tableau) code>) plutôt que d'utiliser le
tout () code>. Ce dernier arrive à travailler pour un tableau 1-D, mais ne fonctionnerait pas avec plus de dimensions. C'est parce que c'est itération par ex. Sur un tableau 4D (qui est ce que le cas intégré
tout () code> le ferait) donne une séquence de tableaux 3D, pas les éléments individuels. P>
. tout () code>. Le test ci-dessus équivaut à: p>
Le N'importe quel code> méthode des tableaux numpopiques renvoie une valeur booléenne. Lorsque vous écrivez:
any(popul_num < 0)
(popul_num < 0).any()
Tout retournera vrai lorsque au moins un des éléments est vrai;
tout (itérable) code>
Juste faire
si np.any (popul_num <0): # do_stuff code> ou
si (popul_num <0). Nany (): #do_stuff code>. Vous commencez par construire un tableau booléen avant i> appliquer
tout code>.