【发布时间】:2015-09-06 23:41:34
【问题描述】:
我有一个由 0 和 1 组成的 numpy 数组(数据)。
import numpy as np
data = np.array([[1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 0],
[1, 1, **1**, 1, 1, 0],
[1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 0],
[1, 1, 1, 1, 1, 1]])
我想提取“1”被相邻的由 1 组成的 5*5 元素包围的索引。
预期的索引用星号表示,即 (3,3)。 布尔数组形式的答案也可以。
[[False False False False False False]
[False False False False False False]
[False False **True** False False False]
[False False False False False False]
[False False False False False False]
[False False False False False False]]
我试过了
from scipy.ndimage.morphology import binary_erosion
kernel = np.ones((5,5))
result = binary_erosion(data, kernel)
print result
[[False False False False False False]
[False False False False False False]
[False False True False False False]
[False False True False False False]
[False False False False False False]
[False False False False False False]]
它产生了两个“真”位置,但我只想要一个在 (3,3)。
怎么做?
编辑:链接问题中显示的解决方案也给出了意想不到的答案。
【问题讨论】:
-
标记为
True的第二个元素也被1s 的5x5 框包围...你为什么不喜欢它? -
@6502 这是因为从第一个 True 已经占用的位置开始计算 1。我想避免重复这样的......
-
@Divakar 不,我在提问之前看到了这个问题,但是该问题中显示的解决方案也给出了我在问题中所坚持的意外答案。
标签: python numpy scipy scikit-learn scikit-image