Мне нужно нарезать массивный массив, чтобы получить массив, соответствующий темно-зеленым областям: массив
Зеленая область - это пересечение нескольких диапазонов в столбцах истрокиЯ думал о чем-то вроде:
M[[1:3,5:7],[1:3,5:7]]=np.zeros(4,4)
Но это не работает. Как я могу сделать это эффективно?
Я нашел ответ, используя эту матричную индексацию с помощью 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)
Возможно, есть более эффективный способ определения строк и столбцов, но это работает для меня
Я думаю, что вам просто нужно сделать каждую темно-зеленую секцию отдельно, так что-то вроде:
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))
ОБНОВЛЕНИЕ на самом деле это работает так:
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]]))
но тогда вам все равно придется переставлять линии