пересечение строк и столбцов - PullRequest
0 голосов
/ 21 ноября 2019

Мне нужно нарезать массивный массив, чтобы получить массив, соответствующий темно-зеленым областям: массив

Зеленая область - это пересечение нескольких диапазонов в столбцах истрокиЯ думал о чем-то вроде:

M[[1:3,5:7],[1:3,5:7]]=np.zeros(4,4)

Но это не работает. Как я могу сделать это эффективно?

Ответы [ 3 ]

1 голос
/ 21 ноября 2019

Я нашел ответ, используя эту матричную индексацию с помощью numpy в stackoverflow

Я добавил массив, чтобы делать то, что я хочу. Окончательный код:

rows = np.hstack((np.arange(1,3), np.arange(5,7)))
cols = np.hstack((np.arange(1,3), np.arange(5,7)))

M[np.ix_(rc,rc)]=np.zeros(4,4)

Возможно, есть более эффективный способ определения строк и столбцов, но это работает для меня

1 голос
/ 21 ноября 2019

Я думаю, что вам просто нужно сделать каждую темно-зеленую секцию отдельно, так что-то вроде:

M[1:3, 5:7] = np.zeros((2,2))

Затем повторите для других темно-зеленых областей.

РЕДАКТИРОВАТЬ: я думаю, я понимаюнемного больше того, что вы хотите сделать, вы хотите сделать это более динамично, поэтому я думаю, что-то вроде этого будет работать:

ta = slice(1, 3)
tb = slice(5, 7)
slices=[ta, tb]
slices = [(s1, s2) for s1 in slices for s2 in slices] #Gives all combinations of slices
for s in slices:
    M[s] = np.zeros((2,2))
0 голосов
/ 21 ноября 2019

ОБНОВЛЕНИЕ на самом деле это работает так:

np.hstack((x[[1,2,5,6], 1:3], x[[1,2,5,6], 5:7]))

лучший вариант, который я нашел:

np.vstack((x[1:9:4, [1,2,5,6]], x[2:9:4, [1,2,5,6]])) 

но тогда вам все равно придется переставлять линии

...