簡體   English   中英

在numpy數組中找到與特定條件匹配的所有坐標對的最有效方法是什么?

[英]What is the most pythonic way to find all coordinate pairs in a numpy array that match a specific condition?

因此,給定一個由1和0組成的2d numpy數組,我想查找每個索引,其中它的值為1, 並且其頂部,左側,右側或底部的位置均由零組成。 例如在這個數組中

0 0 0 0 0   
0 0 1 0 0   
0 1 1 1 0  
0 0 1 0 0  
0 0 0 0 0  

我只想要(1,2),(2,1),(2,3)和(3,2)的坐標,而不是(2,2)的坐標。

我已經創建了可以工作並創建兩個坐標列表的代碼,類似於numpy非零方法,但是我不認為它非常“ pythonic”,我希望有一種更好,更有效的方法來解決此問題。 (*請注意,這僅適用於用零填充的數組)

from numpy import nonzero
...
array= ... # A numpy array consistent of zeros and ones
non_zeros_pairs=nonzero(array)
coordinate_pairs=[[],[]]
for x, y in zip(temp[0],temp[1]):
    if array[x][y+1]==0 or array[x][y-1]==0 or array[x+1][y]==0 or array[x-1][y]==0:
             coordinate_pairs[0].append(x)
             coordinate_pairs[1].append(y)
...

如果numpy中存在可以為我處理的方法,那就太好了。 如果以前已經在stackoverflow上問過/回答過這個問題,我很樂意將其刪除,我很難找到任何東西。 謝謝。

設定

import scipy.signal
import numpy as np

a = np.array([[0, 0, 0, 0, 0],
              [0, 0, 1, 0, 0],
              [0, 1, 1, 1, 0],
              [0, 0, 1, 0, 0],
              [0, 0, 0, 0, 0]])

創建一個與每個值的四個方向匹配的窗口,並進行convolve 然后,您可以檢查元素是否為1 ,以及它們的卷積是否小於4 ,因為值==4表示該值被1s包圍

window = np.array([[0, 1, 0],
                   [1, 0, 1],
                   [0, 1, 0]])

m = scipy.signal.convolve2d(a, window, mode='same', fillvalue=1)

v = np.where(a & (m < 4))

list(zip(*v))

[(1, 2), (2, 1), (2, 3), (3, 2)]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM