La valeur de vérité d'un tableau avec plus d'un élément est ambigu lorsque l'on tente d'indexer un tableau
Je suis en train de mettre tous les éléments de rbs dans une nouvelle matrice si les éléments dans le var(un autre tableau numpy) >=0 et <=.1 . Cependant quand j'ai essayer le code suivant, j'obtiens cette erreur:
ValueError: The truth value of an array with more than one element is ambiguous.
Use a.any() or a.all()`
rbs = [ish[4] for ish in realbooks]
for book in realbooks:
var -= float(str(book[0]).replace(":", ""))
bidsred = rbs[(var <= .1) and (var >=0)]
toutes les idées sur ce que je fais mal?
source d'informationauteur Rtrader | 2012-09-28
Vous devez vous connecter pour publier un commentaire.
Comme je vous l'ai dit dans un commentaire à une réponse précédente, vous devez utiliser soit:
ou
La raison en est que la
and
mot-clé est utilisé par Python pour tester entre deux booléens. Comment une matrice être un booléen? Si 75% de ses éléments sontTrue
est-ilTrue
ouFalse
? Par conséquent, numpy refuse de comparer les deux.Donc, soit vous devez utiliser la logique de la fonction pour comparer deux tableaux de booléens sur un élément par élément (
np.logical_and
) ou l'opérateur binaire&
.En outre, pour l'indexation, vous avez vraiment besoin d'un booléen tableau de la même taille que le tableau que vous êtes d'indexation. Et il doit être un tableauvous ne pouvez pas utiliser une liste de
True/False
à la place:La raison en est que l'aide d'un booléen tableau indique NumPy qui est l'élément à retour. Si vous utilisez une liste de
True/False
, NumPy s'interpréter que comme une liste de1/0
que les entiers, qui est, d'indices, ce qui signifie que vous obtenez soit le deuxième ou le premier élément de ton tableau. Pas ce que vous voulez.Maintenant, comme vous pouvez le deviner, si vous souhaitez utiliser deux booléens tableaux
a
oub
pour l'indexation, pour choisir les éléments pour lesquels lea
oub
est Vrai, vous pouvez utiliserou
Vous obtenez ce message d'erreur lorsque vous essayez d'utiliser Python opérateurs booléens (
not
and
or
) sur la comparaison des expressions impliquant des tableaux Numpy, par exempleC'est parce que de telles comparaisons, par opposition à d'autres comparaisons en Python, créer des tableaux de booléens, plutôt que des booléens (mais peut-être que vous le saviez déjà):
Partie de la solution à votre problème est probablement pour remplacer
and
parnp.logical_and
qui diffuse la ET le fonctionnement sur deux tableaux denp.bool
.Toutefois, ces tableaux de booléens ne peut pas être utilisé pour l'indice ordinaire, Python listes, de sorte que vous besoin pour convertir un tableau: