2016-10-18 2 views
0

erster Beitrag! Ich habe viele andere Posts zu diesem Problem durchgesehen, kann aber nichts finden, was für meinen Code zutrifft.Python - 'der Wahrheitswert eines Arrays mit mehr als einem Element ist mehrdeutig' - welcher Wahrheitswert?

Ich versuche, eine Audiodatei zu lesen und dann die Max- und Min-Werte des Arrays von Proben zu finden, x.
wavread() ist eine Funktion, die in einem anderen Modul definiert ist, das ich importiert habe.
Es gibt fs, x zurück.
x ist ein eindimensionales Array (x.shape = (150529,).)

def minMaxAudio(inputFile): 
    (fs, x) = wavread(inputFile) 
    max_val = numpy.amax(x) 
    min_val = numpy.amin(x) 
    return (min_val, max_val) 

wenn ich diese Zeilen einzeln in ipython eingeben, bekomme ich das Ergebnis, das ich will. aber wenn ich diese Funktion aus einer importierten Py-Datei aufrufen erhalte ich die Fehlermeldung:

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

Sie weist auf die letzte Zeile (return-Anweisung) als Ort des Fehlers.

Jeder andere Beitrag zu diesem Thema, den ich angeschaut habe, enthält eine Art von Bewertungs- oder Vergleichsoperator im Code. Meins hat keinen ... oder ?!

Danke!

+2

Es ist eine weitere Stack-Trace? –

+0

Stimmen Sie mit Dave überein. Sieht aus wie die Fehlerquelle ist, wo Sie die Funktion aufrufen. –

+0

Ich habe versucht, ipython neu zu starten und jetzt funktioniert es. Ich wusste nicht, dass das "Importiermodul" nach dem Ändern der Datei nicht erneut geladen würde. Sie müssen Reload (Modul) ausführen. Das Verwirrende ist, dass ipython * den geänderten Code * ausgedruckt hat, als ich ihn aufgerufen habe ... aber diesen Code nicht ausgeführt habe, sondern stattdessen eine alte Version ausgeführt habe? Ist das richtiges Verhalten? Ich bin auf Ubuntu. – gwens

Antwort

0

Haben Sie bemerkt, dass, wenn Ihre WAV-Datei mehr als einen Kanal hat, zB Stereo, Min_val und Max_val Arrays selbst sind?

Ein solcher Code den Fehler auslösen würde auftreten:

min, max = minMaxAudio('acdc.wav') 
# Assuming floats 
if max > 1: 
    print('saturation') 

Während folgendes funktioniert:

min, max = minMaxAudio('acdc.wav') 
# Assuming floats 
if np.any(max > 1): 
    print('saturation') 
Verwandte Themen