2016-10-18 71 views
0

第一篇文章!我查看了很多關於此問題的其他帖子,但找不到適用於我的代碼的任何內容。python - '具有多個元素的數組的真值不明確' - 什麼真值?

我試圖讀取一個音頻文件,然後找到樣本數組的最大值和最小值,x
wavread()是我導入的另一個模塊中定義的函數。
它返回fs, x
x是一個一維數組(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) 

當我單獨鍵入這些線成IPython中,我得到我想要的結果。但是當我調用此函數從導入.py文件出現錯誤:

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

它突出的最後一行(return語句)爲錯誤的位置。

我看過的其他每篇文章都包含了代碼中的某種評估或比較運算符。我沒有一個......是嗎?!

謝謝!

+2

它的存在,進一步的堆棧跟蹤? –

+0

同意戴夫。看起來錯誤來源是你調用函數的地方。 –

+0

我試過重新啓動ipython,現在它工作。我不知道再次運行「導入模塊」在更改後不會重新加載文件。你必須運行重裝(模塊)。令人困惑的是,ipython在我調用它時打印出已更改的代碼...但實際上沒有運行該代碼,而是運行舊版本代碼?這真的是正確的行爲嗎?我在Ubuntu上。 – gwens

回答

0

你有沒有注意到如果你的WAV文件有多個通道,說它是立體聲,min_val和max_val將是數組本身?

這樣的代碼會引發你會遇到的錯誤:

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

而下面的工作:

min, max = minMaxAudio('acdc.wav') 
# Assuming floats 
if np.any(max > 1): 
    print('saturation') 
相關問題