这是我的目标
在我的解释中,我从1开始计算行和列
给定一个大小为784x49的二维数组 - 我想处理它,以便在第1列 - 第1,2,3,4,29,30,31,32,57,58,59,60,85,86,7行, 88个元素不为零,其余为零。
类似于第2列 - 第5,6,7,8,3,3,3,3,3,3,6,9,6,9,6,9,6,9,6,9,6,9,6,9,6,9,6,9,6,9,6,9,6,9,6,9,6,9,6,9,9,5,9和9,5是非零的,其余为零。
如果您假设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。
感谢。
答案 0 :(得分:1)
这大致是你想要的吗?
>>> 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]])