[英]Looping through n x n matrix with a smaller matrix of certain size with numpy arrays
我目前遇到以下問題,給出一個數組讓我們說簡單一個4 x 4數組(我實際上使用的是512 x 512)
X = np.array([[3, 5, 2, 4],
[7, 6, 8, 8],
[1, 6, 7, 7],
[2, 1, 3, 4]])
我想以一種可以在表單中保存新數組的方式循環/滑動數組
np.array([3,5],[7,6]), np.array([2,4], [8,8]), np.array([1,6],[2,1]), np.array ([7,7],[1,4])
等等(理想情況下我可以選擇我的“滑動”窗口的步長和大小)。 另外我想根據某些條件選擇這些數組,見下文。
目前我通過切片(見代碼)我的矩陣設法做了幾乎所有事情。 這給出了我想要的步驟的正確切片,然后通過使用itertools
模塊,我可以遍歷我的所有列表列表,計算小於某個值的元素並保存它們。 我不能做的是將所有這些新列表之間的索引鏈接到主矩陣。 出於這個原因,我正在考慮將所有內容移動到numpy
數組,這應該(在我的理解中)在計算方面更有效,我想應該解決我的索引問題。 現在唯一的問題是我不知道為任意nxn
矩陣解決這個問題。
X = np.array([[3, 5, 2, 4],
[7, 6, 8, 8],
[1, 6, 7, 7],
[2, 1, 3, 4]])
width = len(m[0])
height = len(m)
height = 2 # size of the matrix sliding
width = 2
for i in range(0, height - slice_y + 1,2):
for j in range(0, width - slice_x + 1,2):
Appended.append(
[
[m[a][b] for b in range(j, j + slice_x)]
for a in range(i, i + slice_y)
]
)
理想情況下,我想要的是一般矩陣N x N,但目前也只是像示例中那樣將輸出作為數組的形式得到:
np.array([3,5],[7,6]) . np.array ([2,4], [8,8]) , np.array ([1,6],[2,1]), np.array ([7,7],[1,4])
讓我們說一旦發現例如數組np.array([2,4], [8,8])
有兩個大於7
元素,並且總和超過20
來保存這個數組相對於我的初始坐標矩陣。 所以保存索引會將X[0][2]
, X[0][3]
, X[1][2]
, X[1][3]
或至少第一個X[0][2]
起來知道我的“窗口”的步驟我可以通過索引我的主矩陣來訪問我的子陣列。
你可以直接切片numpy數組
X = np.array([[3, 5, 2, 4],
[7, 6, 8, 8],
[1, 6, 7, 7],
[2, 1, 3, 4]])[0:2,0:2]
在你的情況下,我會生成一個你將要使用的子矩陣邊緣索引的列表。 然后使用它來生成子系統列表,然后使用它來根據子系統生成真值或假值的列表。 然后,您可以使用該值的真/假值列表來修剪您的初始標記列表。 您也可以在不存儲子系統的情況下執行此操作。
indicies= [((i,i+s_width),(j,j+s_height)) for i in range(0,width-s_width) for j in range(0,height-s_height)]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.