假設我有以下陣列
import numpy as np
a = np.array([[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 1. 1. 1. 0. 0. 0.]
[0. 0. 0. 0. 1. 1. 1. 0. 0. 0.]
[0. 0. 0. 0. 1. 1. 1. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 1. 1. 1. 0. 0. 0. 0. 0.]
[0. 0. 1. 1. 1. 0. 0. 0. 0. 0.]
[0. 0. 1. 1. 1. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]])
并想要獲得每個塊的中心,以便我可以獲得以下陣列:
a_centers = np.array([[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 1. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 1. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]])
我已經考慮過使用手段或卷積,但我想不出一個非常簡單的解決方案。
我發現的有效解決方案之一是:
a_centers = np.zeros(a.shape)
for i in range(len(a)):
for j in range(len(a[i])):
if np.sum(a[i - 1:i 2, j - 1:j 2]) == 9:
a_centers[i, j] = 1
uj5u.com熱心網友回復:
如果您確定您的塊是方形的并且不共享單元格,那么您可以跳過所有sum內容。我確實希望它np.where比for回圈更快
x,y=np.where(a==1)
blocks=list(zip(x,y))
for _ in range(x.size//9):
left_x,left_y=blocks[0]
a_centers[left_x 1, left_y 1]=1
for i in range(3):
for j in range(3):
blocks.remove((left_x i, left_y j))
uj5u.com熱心網友回復:
這有點低效,因為沒有邊緣單元可以位于 3x3 塊的中心:
for i in range(1,len(a)-1):
for j in range(1,len(a[i])-1):
if np.sum(a[i - 1:i 2, j - 1:j 2]) == 9:
a_centers[i, j] = 1
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/361993.html
