Gebruik a.any () of a.all ()

Hier is de fout die ik krijg:

if valeur <= 0.6:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

Ik heb verschillende berichten gelezen over A.Alle () of A.all () maar nog steeds niet kan vinden een manier die echt duidelijk uitlegt hoe het probleem kan oplossen. Ik zie waarom Python niet leuk vindt wat ik heb geschreven, maar ik weet niet zeker hoe ik het moet oplossen.


Antwoord 1, Autoriteit 100%

Als u een kijkje neemt naar het resultaat van valeur <= 0.6, kunt u zien wat deze ambiguïteit veroorzaakt:

>>> valeur <= 0.6
array([ True, False, False, False], dtype=bool)

Dus het resultaat is een andere array die in dit geval 4 Booleaanse waarden heeft. Wat moet het resultaat zijn? Mocht de voorwaarde waar zijn wanneer één waarde waar is? Mocht de voorwaarde alleen waar zijn wanneer alle waarden waar zijn?

Dat is precies wat numpy.anyen numpy.alldoen. De eerste vereist ten minste één echte waarde, de laatste vereist dat alle waarden waar zijn:

>>> np.any(valeur <= 0.6)
True
>>> np.all(valeur <= 0.6)
False

Antwoord 2, Autoriteit 6%

Er is nog een manier om dit

te krijgen

import numpy as np
a = np.array([1,2,3,4])
b = np.array([5,6,7,8])
c = np.array([1,2,3,4])
print((a == b ).all())  #False
print((a == c ).all())   # True
print((a == b ).any())   #False
print((a == c ).any())   #True
print((a > 3 ).all())    #False

Antwoord 3, Autoriteit 5%

U commentaar:

valeur is een vector gelijk aan [ 0. 1. 2. 3.] Ik ben geïnteresseerd in elke afzonderlijke term. Voor het deel onder 0.6, retourneer dan “dit werkt”….

Als je geïnteresseerd bent in elke term, schrijf dan de code op zodat deze over elke term gaat. Bijvoorbeeld.

for b in valeur<=0.6:
    if b:
        print ("this works")
    else:   
        print ("valeur is too high")

Hiermee worden 2 regels geschreven.

De fout wordt veroorzaakt door numpy-code wanneer u deze probeert te gebruiken in een context die een enkele, scalaire waarde verwacht. if b:...kan maar één ding doen. Het doorloopt op zichzelf niet de elementen van ben doet voor elk iets anders.

Je zou die iteratie ook kunnen casten als lijstbegrip, bijvoorbeeld

['yes' if b else 'no' for b in np.array([True, False, True])]

Antwoord 4

Dit zou ook moeten werken en is een beter antwoord op wat er in de vraag wordt gesteld:

for i in range(len(x)):
    if valeur.item(i) <= 0.6:
        print ("this works")
    else:   
        print ("valeur is too high")

Other episodes