我想编写一个程序来确定声音样本的最大值。循环返回所有样本的值,但我无法弄清楚如何打印最大的样本。最大()函数使用从循环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