Как создать матрицу состоит из подматрицы - PullRequest
1 голос
/ 11 июня 2019

Я хочу создать матрицу, состоящую из некоторой подматрицы, или элементы определяются некоторыми условиями об индексах.

, например

X = np.array(
[[0, 0, 1, 1, 1],
 [0, 0, 1, 1, 1],
 [1, 1, 0, 0, 1],
 [1, 1, 0, 0, 1],
 [1, 1, 1, 1, 0]]
)

, где i -row и j -col соответствуют условиям ниже

0 if 2k ≤ i < 2(k+1) and 2k ≤ j < 2(k+1)
1 otherwise

В вышеприведенном условии k равно 0, 1, 2..., а 2 также является параметром для изменения и

Итак, что мне наконец нужно, это

0 if nk ≤ i < n(k+1) nk ≤ j < n(k+1)
1 otherwise

Я думаю, np.ix_ подходит для этого требования, но для этого требуется структура цикла (я ненавижу циклы).

Есть ли какой-нибудь хороший способ создать это?

1 Ответ

0 голосов
/ 11 июня 2019

Одним из способов будет использование метода outer оператора not_equal, например:

N = 17; k = 5
np.not_equal.outer(*2*(np.arange(N)//k,)).view('u1')
# array([[0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
#        [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
#        [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
#        [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
#        [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
#        [1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1],
#        [1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1],
#        [1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1],
#        [1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1],
#        [1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1],
#        [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1],
#        [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1],
#        [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1],
#        [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1],
#        [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1],
#        [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0],
#        [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0]], dtype=uint8)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...