0
votes

Comment fonctionne exactement la méthode de la "méthode de Python?

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: xxx

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 si instruction destinée à vérifier que le nombre de molécules est positif. si est traité à la prochaine itération, else sortir de toute la simulation xxx

J'ai utilisé le . Nan () Pour essayer de trouver si un élément du tableau popul_num 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?

Je viens de courir le programme et le numéro final des molécules, le système renvoyé était: [135 -19 65 54] Le programme aurait dû démarquer avant que le deuxième élément ne soit arrivé à -19.

Toute suggestion?

acclamations


2 commentaires

Tout retournera vrai lorsque au moins un des éléments est vrai; tout (itérable)


Juste faire si np.any (popul_num <0): # do_stuff ou si (popul_num <0). Nany (): #do_stuff . Vous commencez par construire un tableau booléen avant appliquer tout .


5 Réponses :


1
votes

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!")


0 commentaires

0
votes

tout () retour vrai , si au moins l'un des éléments est vrai : xxx


0 commentaires

0
votes

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.


0 commentaires

2
votes

Vous devez utiliser . Nan () sur une matrice booléenne après faire la comparaison, pas sur les valeurs de popul_num eux-mêmes. Il retournera true si l'une des valeurs de la matrice booléenne est true , sinon false .

En fait, . tout () 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 sur la valeur booléenne renvoyée par tout , qui évalue toujours vrai car les valeurs booléennes sont traitées. comme 0 et 1 (pour false et vrai respectivement) dans les opérations impliquant des entiers.

Vous pouvez faire: xxx

ici popul_num <0 est une matrice booléenne contenant les résultats des comparaisons d'éléments par éléments. Dans votre exemple: xxx

Vous êtes, cependant, correct d'utiliser array.ca () (ou np.any (tableau) ) plutôt que d'utiliser le tout () . 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 () le ferait) donne une séquence de tableaux 3D, pas les éléments individuels.

Il y a aussi de la même manière . tout () . Le test ci-dessus équivaut à: xxx


0 commentaires

1
votes

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()


0 commentaires