Есть несколько способов, но, кажется, проще всего сначала преобразовать 2D-сетку в 1D-сетку и продолжить, как в 1D-случае, а затем преобразовать обратно в 2D:
c = 0.1
pos = 100
myzeros=scipy.zeros((c*pos,c*pos))
myzeros1D = myzeros.ravel()
grid=scipy.ones((pos,pos))
grid1D = grid.ravel()
dist=sc.random.permutation(pos*pos)[:c*pos*c*pos]
grid1D[dist]=myzeros1D
myzeros = myzeros1D.reshape((c*pos,c*pos))
grid = grid1D.reshape((pos, pos))
РЕДАКТИРОВАТЬ: чтобы ответить на ваш комментарий: если вы хотите, чтобы только часть myzeros входила в массив grid, вы должны уменьшить массив dist. Пример:
dist = scipy.random.permutation(pos*pos)[:c*pos]
grid1D[dist] = myzeros1D[:c*pos]
И я надеюсь, что вы знаете, что эту последнюю строку можно записать как
grid1D[dist] = 0
если вы действительно хотите установить эти элементы в один, а не использовать элементы из другого массива.