簡體   English   中英

使用具有numpy數組的較小矩陣的nxn矩陣循環

[英]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.

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