簡體   English   中英

創建2d遮罩數組並應用於2d數組

[英]creating 2d mask array and applying on a 2d array

這是我的目標
在我的解釋中,我從1開始計算行數和列數。
給定大小為784x49的2d數組-我想對其進行處理,以使在第1列-1,2,3,4,29,30,31,32,57,58,59,60,85,86,7行, 88個元素為非零,其余元素為零。 類似地,第2列-第5、6、7、8、33、34、35、36、61、62、63、64、89、90、91、92行為非零,其余均為零。 如果您將784假定為28x28圖像,那么您可以理解,我的49列中的每一個都正在訪問圖像的4x4區域,但它們並不重疊。
我正在考慮創建一個尺寸為784x49的2d蒙版,其中49x16(= 784)個元素設置為未蒙版,而其他元素被蒙版。因此,我可以在784x49輸入數組上重復使用此蒙版以快速在2d數組中設置零。
我的偽代碼是

first time = 0;
for x in range(0,49) :
    initialize a 2D array 'one_column_at_a_time' of 28x28 inputs with all element set to TRUE ;
    one_column_at_a_time[x/7:(x/7)+4,(x%7)*4:(x%7)*4+4]=FALSE ;
    reshape one_column_at_a_time to 784x1;
    if (first time == 0):
        first time = 1 ;
        full_784x49 = one_column_at_a_time;
    else
        full_784x49 = vertical_stack(full_784x49,one_column_at_a_time);

我無法找出專門用於創建蒙版2d numpy數組的相關函數。我知道np.vstack,np.reshape,np.zeros和np.ones。

謝謝。

這大概就是您想要的嗎?

>>> import numpy as np
>>> n = 3 # use 7
>>> k = 2 # use 4
>>> mask = (np.clip(np.add.outer(-np.arange(n*n), np.arange(n*n*k*k) // k), -1, k*n + 1) % n).astype(bool) 
>>> mask
array([[False, False,  True,  True,  True,  True, False, False,  True,
         True,  True,  True, False, False,  True,  True,  True,  True,
         True,  True,  True,  True,  True,  True,  True,  True,  True,
         True,  True,  True,  True,  True,  True,  True,  True,  True],
       [ True,  True, False, False,  True,  True,  True,  True, False,
        False,  True,  True,  True,  True, False, False,  True,  True,
         True,  True,  True,  True,  True,  True,  True,  True,  True,
         True,  True,  True,  True,  True,  True,  True,  True,  True],
       [ True,  True,  True,  True, False, False,  True,  True,  True,
         True, False, False,  True,  True,  True,  True, False, False,
         True,  True,  True,  True,  True,  True,  True,  True,  True,
         True,  True,  True,  True,  True,  True,  True,  True,  True],
       [ True,  True,  True,  True,  True,  True, False, False,  True,
         True,  True,  True, False, False,  True,  True,  True,  True,
        False, False,  True,  True,  True,  True,  True,  True,  True,
         True,  True,  True,  True,  True,  True,  True,  True,  True],
       [ True,  True,  True,  True,  True,  True,  True,  True, False,
        False,  True,  True,  True,  True, False, False,  True,  True,
         True,  True, False, False,  True,  True,  True,  True,  True,
         True,  True,  True,  True,  True,  True,  True,  True,  True],
       [ True,  True,  True,  True,  True,  True,  True,  True,  True,
         True, False, False,  True,  True,  True,  True, False, False,
         True,  True,  True,  True, False, False,  True,  True,  True,
         True,  True,  True,  True,  True,  True,  True,  True,  True],
       [ True,  True,  True,  True,  True,  True,  True,  True,  True,
         True,  True,  True, False, False,  True,  True,  True,  True,
        False, False,  True,  True,  True,  True, False, False,  True,
         True,  True,  True,  True,  True,  True,  True,  True,  True],
       [ True,  True,  True,  True,  True,  True,  True,  True,  True,
         True,  True,  True,  True,  True, False, False,  True,  True,
         True,  True, False, False,  True,  True,  True,  True, False,
        False,  True,  True,  True,  True,  True,  True,  True,  True],
       [ True,  True,  True,  True,  True,  True,  True,  True,  True,
         True,  True,  True,  True,  True,  True,  True, False, False,
         True,  True,  True,  True, False, False,  True,  True,  True,
         True, False, False,  True,  True,  True,  True,  True,  True]])

暫無
暫無

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

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