提问者:小点点

从2D numpy数组中提取“块”地址和值


我正在尝试想出一个从python中的2D numpy数组中提取矩形地址和值的算法。输入如下所示:

[[1, 1, 0, 0, 0, 0, 2],
 [1, 1, 0, 0, 0, 0, 2],
 [0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 3, 3, 3, 0],
 [0, 0, 0, 3, 3, 3, 0],
 [0, 4, 4, 3, 3, 3, 0],
 [0, 0, 0, 0, 0, 0, 3]]

在数组中的不同位置有各种相同数据的簇。我试图将其输出为一种格式,该格式由簇开始地址(start Y,start X)、簇结束地址(endY,endX)和该簇的值组成,采用矩形格式。因此,对于上面的2D数组,输出值系列如下所示(为了简洁起见,我排除了零值,但它们将包含在输出中):

(0, 0, 1, 1, 1)
(0, 6, 1, 6, 2)
(3, 3, 5, 5, 3)
(5, 1, 5, 2, 4)
(6, 6, 6, 6, 3)

numpy中有没有一个函数可以做这样的事情?我已经浏览了留档,似乎什么也找不到,尽管不可否认,我对numpy很陌生,所以我可能会遗漏一些东西,或者没有把嵌套函数的逻辑放在一起,使过程成为二维的。

谢谢你!


共1个答案

匿名用户

我没有看到第二个数组的相关性。

只要盯着第一个数组,我就可以索引非零块

In [738]: arr[0:2,0:2]
Out[738]: 
array([[1, 1],
       [1, 1]])

In [739]: arr[0:2,6:7]
Out[739]: 
array([[2],
       [2]])

In [740]: arr[3:6,3:6]
Out[740]: 
array([[3, 3, 3],
       [3, 3, 3],
       [3, 3, 3]])


In [741]: arr[5:6,1:3]
Out[741]: array([[4, 4]])

In [742]: arr[6:7,6:7]
Out[742]: array([[3]])