我想編寫一個程序來確定聲音樣本的最大值。循環返回所有樣本的值,但我無法弄清楚如何打印最大的樣本。最大()函數使用從循環python
def largest():
f=pickAFile()
sound=makeSound(f)
for i in range(1,getLength(sound)):
value=getSampleValueAt(sound,i)
print max([value])
我想編寫一個程序來確定聲音樣本的最大值。循環返回所有樣本的值,但我無法弄清楚如何打印最大的樣本。最大()函數使用從循環python
def largest():
f=pickAFile()
sound=makeSound(f)
for i in range(1,getLength(sound)):
value=getSampleValueAt(sound,i)
print max([value])
嘗試:
def largest():
f = pickAFile()
sound = makeSound(f)
value = []
for i in range(1, getLength(sound)):
value.append(getSampleValueAt(sound, i))
print max(value)
或者
def largest():
f = pickAFile()
sound = makeSound(f)
print max(getSampleValueAt(sound, i) for i in range(1, getLength(sound)))
與您的代碼,value
在每次迭代將被覆蓋。如果您使用所有值創建列表,則可以使用max
找到最大值。
另見:
沒有測試它,但也許:
def largest():
f=pickAFile()
sound=makeSound(f)
value = [ getSampleValueAt(sound,i) for i in range(1,getLength(sound)) ]
print max(value)
如果你有幾個Msamples呢? – 2014-08-28 14:23:03
@Sylvain Leroux那麼我將不得不改變它,但這應該是對主題提供的代碼的修復 – Vizjerei 2014-08-28 14:51:58
不記得我們在處理音頻數據。可能有百萬的樣本。如果你想堅持高效兩個東西在空間和時間,你必須依靠遠不如性感:
def largest():
f = pickAFile()
sound = makeSound(f)
max = getSampleValueAt(sound, 1) # FIX ME: exception (?) if no data
idx = 2
while idx < getLength(sound):
v = getSampleValueAt(sound, i)
if v > max:
max = v
i += 1
print max
發電的解決方案是有效的太的空間內,但速度快,無可以擊敗Python中一個普通的命令循環。
請修復您的縮進。 – chepner 2014-08-28 14:21:59