0

Here is my aim
In my explanation I am counting row and column from 1.
Given a 2d array of size 784x49 - I want to process it such that in column 1 - row 1,2,3,4,29,30,31,32,57,58,59,60,85,86,7,88 elements are non-zero and rest are zero. Similiarly for column 2 - row 5,6,7,8,33,34,35,36,61,62,63,64,89,90,91,92 are non-zero and rest are zero. If you assume 784 to be 28x28 image then you can understand that each of my 49 column is accessing a non-overlapping 4x4 region of the image.
I am thinking of creating a 2d mask of size that 784x49 that has 49x16(=784) elements set to unmasked while others are masked.So that , I can use this mask repeatedly on 784x49 input array to quickly set zeroes in 2d array .
My pseudo code is

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);

I am not able to figure out relevant functions specifically for creating masked 2d numpy array.I know np.vstack , np.reshape , np.zeros , np.ones .

Thanks.

1 Answer 1

1

Is this roughly what you want?

>>> 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]])
Sign up to request clarification or add additional context in comments.

3 Comments

this is making n^2 arrays each having nnk elements . For my purpose I need 49 arrays each having 784 elements. So , if n=7 . then 7*7*k=784 , means k=16 . So lengthwise it is ok . But content wise I want first array to have 1-4,29-32,57-60,85-88 having value false . Here I get 1-7,50-56... as false . So , that needs change.
@user1371666 Don't accept if it's wrong ;-) -- Ok second attempt - pls have a look.
that is partially better . It made 112 False in mask[0] . 16 at right places and 96 at additional places.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.