给定一个由 1 和 0 组成的二维数组,我需要获取 1 所在的小节的坐标。例如,给定下面定义的数组:
a = [[0, 0, 0, 0],
[0, 1, 0, 0],
[0, 0, 1, 0]]
我的函数应该返回开始,其中 1 的分段以 (1,1) 开始,并返回结束,其中 1 的分段以 (2,2) 结束
是否有比使用 numpy 的 for 循环更有效的方法来实现此目的?
最佳答案
灵感来自this post
,这是一种方法 -
def start_end(a):
m,n = a.shape
mask = a.astype(bool)
rowm = mask.any(1)
colm = mask.any(0)
r0 = rowm.argmax()
c0 = colm.argmax()
r1 = m-rowm[::-1].argmax()-1
c1 = n-colm[::-1].argmax()-1
return (r0,c0), (r1,c1)
示例运行 -
In [114]: a # bit more generic case
Out[114]:
array([[0, 1, 0, 0],
[0, 1, 0, 0],
[0, 0, 1, 1]])
In [115]: start_end(a)
Out[115]: ((0, 1), (2, 3))
关于python - 如何获取条件成立的二维数组分段的开始和结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59511521/