scipy - как вставить массив нулей в другой массив с разными размерами - PullRequest
1 голос
/ 08 ноября 2011

Если у меня есть массив:

myzeros=scipy.zeros((c*pos,c*pos))  , c=0.1 , pos=100

и массив:

grid=scipy.ones((pos,pos))

Как я могу вставить нули в сетку в случайных положениях? Проблема с размерами.

Я знаю, что в 1d вы можете сделать:

myzeros=sc.zeros(c*pos) # array full of (zeros)
grid=sc.ones(pos)         # grid full of available positions(ones)
dist=sc.random.permutation(pos)[:c*pos] # distribute c*pos zeros in random
                                        # positions
grid[dist]=myzeros

Я пробовал нечто подобное, но это не работает. Я пробовал также: myzeros=sc.zeros(c*pos), но все равно не работает.

1 Ответ

3 голосов
/ 08 ноября 2011

Есть несколько способов, но, кажется, проще всего сначала преобразовать 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

если вы действительно хотите установить эти элементы в один, а не использовать элементы из другого массива.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...