我有以下numpy数组:
data = [[2 1 2 0 3 0 1 0 1]
[4 0 1 2 3 3 4 4 1]
[2 3 2 2 2 1 2 0 3]
[0 3 1 3 4 0 0 3 2]]
data = np.array(data)
我想写一个有效的函数(就执行时间而言),它返回具有特定值的元素的索引,具有另一个值的邻居。例如对上述数据运行函数find_elements(data, 3, 2)
应返回以下内容:
result = [(4, 1), (1, 2)]
到目前为止,我已经尝试过这个:
def find_elements(data, value, neighbor_value):
result = []
ix = np.isin(data, [value])
a_ix = np.where(ix)
for y, x in itertools.izip(a_ix[0], a_ix[1]):
if y == 0 or y == data.shape[0] - 1 or x == 0 or x == data.shape[1] - 1:
continue
if data[y - 1, x] == neighbor_value or data[y + 1, x] == neighbor_value or data[y, x - 1] == neighbor_value or data[y, x + 1] == neighbor_value:
result.append((x, y))
return result
问题:有什么办法可以在numpy过滤中指定邻居元素吗?或者在任何提供此功能的库中是否已有内置函数?