检索由相同元素包围的指定元素的位置

时间:2014-04-20 06:48:08

标签: python numpy scipy

对于给定的2d数据数组,如何检索7的位置(索引),它本身在邻居中被相同的值包围。

import numpy as np
import scipy.ndimage.filters as filters
    data  = np.array([[0,1,2,3,4,7,6,7,8,9,10], 
        [3,3,3,4,7,7,7,8,11,12,11],  
        [3,3,3,5,7,7,7,9,11,11,11],
        [3,4,3,6,7,7,7,10,11,11,11],
        [4,5,6,7,7,9,10,11,11,11,11]])

我只想要位置[2,5]。 7由其他7个独家包围。 以下代码为代码中的任何值提供了答案。

 answer = np.where(np.logical_and.reduce([data == f(data, footprint=np.ones((3,3)), mode='constant', cval=np.inf) for f in (filters.maximum_filter, filters.minimum_filter)]))
    print answer

我想强制它仅适用于指定值(7)。 上面的代码来自Retrieve position of elements with setting some criteria in numpy

的答案

1 个答案:

答案 0 :(得分:1)

另一个logical_and,检查指定值,瞧。

specified_value = 7

answer = np.where(np.logical_and(
                      np.logical_and.reduce(
                          [data == f(data, 
                                     footprint=np.ones((3,3)), 
                                     mode='constant', 
                                     cval=np.inf) for f in 
                                         (filters.maximum_filter, 
                                          filters.minimum_filter)]),
                      data == specified_value))