嗨)我正在尝试用循环到NumPy操作来重构我的代码,以使代码更快。你知道怎么做吗?这段代码根据2dndarray中相邻元素的值为每个元素分配一个值,对于这样的特定人员,我找不到任何答案。你知道吗
这是6邻域法的实现,在这里描述的照片上寻找鞍点https://documentcloud.adobe.com/link/track?uri=urn:aaid:scds:US:978c30d2-4888-491c-85c1-3949ea6166e9
它接受当前元素与其相邻元素的差异。然后计算这些差异符号的变化,如果它大于等于4,则为鞍点。你知道吗
有没有可能没有回路?你知道吗
抱歉,如果问题不清楚或格式不正确-这是我在StackOverflow上发表的第一个问题
def findSaddlePoints6neibours(gray):
gray = gray.astype(int)
h = gray.shape[0]
w = gray.shape[1]
number = 0
result = np.zeros((h, w))
for y in range(1, h - 1):
for x in range(1, w - 1):
center = gray[y][x]
neiboursDiff = []
neiboursDiff.append(gray[y-1][x] - center)
neiboursDiff.append(gray[y-1][x+1] - center)
neiboursDiff.append(gray[y][x+1] - center)
neiboursDiff.append(gray[y+1][x] - center)
neiboursDiff.append(gray[y+1][x-1] - center)
neiboursDiff.append(gray[y][x-1] - center)
changes = 0
for i in range(5):
if (neiboursDiff[i] < 0 and neiboursDiff[i+1] > 0) or (neiboursDiff[i] > 0 and neiboursDiff[i+1] < 0):
changes += 1
if (neiboursDiff[0] < 0 and neiboursDiff[5] > 0) or (neiboursDiff[0] > 0 and neiboursDiff[5] < 0):
changes += 1
if changes > 3:
number += 1
result[y][x] = 1
return [result, number]
以下是一个矢量化解决方案:
快速测试:
编辑:
上述函数的缺点是占用更多内存。如果可以使用Numba,则可以编译函数,如果使用并行化,则可以使其更快:
继续上面的小基准:
相关问题 更多 >
编程相关推荐