【发布时间】:2015-02-28 03:32:13
【问题描述】:
我正在编写一个算法来确定密度图上“山”的间隔。如果有人感兴趣,该情节是从 Kinect 的深处拍摄的。这是该算法发现的快速直观示例:(移除了小山):
我目前的算法:
def find_peak_intervals(data):
previous = 0
peak = False
ranges = []
begin_range = 0
end_range = 0
for current in xrange(len(data)):
if (not peak) and ((data[current] - data[previous]) > 0):
peak = True
begin_range = current
if peak and (data[current] == 0):
peak = False
end_range = current
ranges.append((begin_range, end_range))
previous = current
return np.array(ranges)
该功能有效,但在我的笔记本电脑上需要将近 3 毫秒,并且我需要能够以每秒至少 30 帧的速度运行整个程序。这个函数相当丑陋,我必须为我的程序每帧运行 3 次,所以我想要任何关于如何简化和优化这个函数的提示(也许我错过了来自 numpy 或 scipy 的东西)。
【问题讨论】:
-
看起来这个算法主要是一个零查找器。一旦找到一个非零元素,它就会退出比较连续元素并再次寻找零。
-
所以更像是 'if peak and (data[current] == 0):' 后跟 'elif (not peak) and (data[current] != 0):'?跨度>
标签: python optimization numpy scipy signal-processing