NumPy ValueError: La valeur de vérité d'un tableau avec plus d'un élément est ambigu. Utiliser un.() ou une.tous les()
J'était en train de calculer les vecteurs propres et les valeurs propres d'une matrice dans NumPy et je voulais juste vérifier les résultats par assert()
. Ce serait jeter un ValueError que je ne comprends pas très bien, car l'impression de ces comparaisons fonctionne très bien. Des conseils comment je pourrais obtenir ce assert()
de travail?
import numpy as np
A = np.array([[3,5,0], [5,7,12], [0,12,5]])
eig_val, eig_vec = np.linalg.eig(A)
print('eigenvalue:', eig_val)
print('eigenvector:', eig_vec)
for col in range(A.shape[0]):
assert( (A.dot(eig_vec[:,col])) == (eig_val[col] * eig_vec[:,col]) )
OriginalL'auteur Sebastian | 2014-03-04
Vous devez vous connecter pour publier un commentaire.
Comme il le dit, il est ambigu. Votre tableau de comparaison renvoie un booléen tableau. Méthodes () () réduire les valeurs dans le tableau (logical_or ou logical_and). En outre, vous ne voulez probablement pas à vérifier l'égalité. Vous devez remplacer votre état avec:
OriginalL'auteur Martin
Le message d'erreur, il explique assez bien:
Ce qui devrait
bool(np.array([False, False, True]))
retour? Vous pouvez faire plusieurs arguments plausibles:(1)
True
, parce quebool(np.array(x))
doit retourner la même quebool(list(x))
, et non vide listes sont truelike;(2)
True
, parce que au moins un élément estTrue
;(3)
False
, parce que pas tous les éléments sontTrue
;et ce n'est même pas compte tenu de la complexité de la N-d de cas.
Donc, puisque "la valeur de vérité d'un tableau avec plus d'un élément est ambiguë", vous devez utiliser
.any()
ou.all()
, par exemple:et vous pourriez envisager de
np.allclose
si vous êtes à la comparaison des tableaux de flotte:OriginalL'auteur DSM
essayer ça=> numpy.array(yourvariable) suivi de la commande, de comparer, de ce que vous souhaitez.
OriginalL'auteur Anurag Gupta