【发布时间】:2023-03-25 21:15:01
【问题描述】:
我正在做一个蟒蛇挑战,这个让我难过。 这是输入矩阵(numpy 格式):
# [[1, 7, 2, 2, 1],
# [7, 7, 9, 3, 2],
# [2, 9, 4, 4, 2],
# [2, 3, 4, 3, 2],
# [1, 2, 2, 7, 1]]
函数会输出这个矩阵
# [[False, True, False, False, False],
# [True, False, True, False, False],
# [False, True, False, True, False],
# [False, False, False, False, False],
# [False, False, False, True, False]]
如果任何(上/下/左/右)邻居比自身小 2,则该值将为“真”。我们一直在学习 numpy,但这并不觉得它是一个太多 numpy 的东西)。
我尝试进行简单的 if comparison=true 检查,但我不断遇到超出索引的错误,我找不到任何方法来规避/忽略这些错误。
提前致谢。
这是我迄今为止所尝试的精髓。我在这里简化了任务,只需要水平检查第一行。如果我可以让它工作,我会扩展它以水平检查下一行直到最后,然后我会做同样的事情,但垂直。
import numpy as np
ex=np.array([[7, 2, 3, 4, 3, 4, 7]])
def count_peaks(A):
matrixHeight=A.shape[0]
matrixWidth=A.shape[1]
peakTable=np.zeros(shape=(matrixHeight,matrixWidth))
for i in range(matrixWidth):
if A[i]-A[i+1]>=2 or A[i]-A[i-1]>=2:
peakTable[0,i]=1
return peakTable
...当然输出:
IndexError: index 1 is out of bounds for axis 0 with size 1
因为我试图找到不存在的 A[-1] 的值。
【问题讨论】:
-
在我看来很像一个 Numpy 的东西。使用数组的位置偏移副本并将原始数组与它们进行比较。
-
你说得对,我在 OP 中添加了我的工作。
-
邻居必须正好小两个才算正确?为什么右下角的1是假的?它的邻居都不比它小两个?
-
如果任何邻居小>=2,则峰值表为“真”。