【问题标题】:extract "block" addresses and value from 2D numpy array从 2D numpy 数组中提取“块”地址和值
【发布时间】:2017-08-14 21:15:20
【问题描述】:

我正在尝试提出一种算法,用于从 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]]

在数组的不同位置有不同的相同数据簇。我正在尝试将其输出为一种格式,该格式由集群起始地址(startY、startX)、集群结束地址(endY、endX)和该集群的值组成,采用矩形格式。所以对于上面的二维数组,一系列的输出值看起来像这样(为了简洁,我已经排除了零值,但它们会包含在输出中):

(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 很陌生,所以我可能遗漏了一些东西,或者没有将嵌套函数的逻辑放在一起以使过程二维.

谢谢!

【问题讨论】:

标签: python numpy multidimensional-array


【解决方案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]])

【讨论】:

  • 对不起,如果我不清楚。我知道如何自己查看第一个数组并手动索引它来获取这些值。我正在寻找一个内置函数或一系列函数,它们会在传递数组时自动查找并返回这些地址。
  • 评论链接表明图像处理包中可能有一些有用的东西。 numpy 本身不会有这样的东西;它太专业了,无法快速编译实现。并且过于迭代而无法从整个数组操作中构建。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-23
  • 1970-01-01
  • 1970-01-01
  • 2021-05-15
  • 2021-08-23
  • 2012-06-05
  • 2015-10-10
相关资源
最近更新 更多