![](/img/trans.png)
[英]What is the most Pythonic way to find all Nones in a list of lists?
[英]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.