Вставка матрицы в другую матрицу (указать c позиций) - PullRequest
1 голос
/ 10 апреля 2020

У меня есть вопрос о добавлении матрицы. У меня есть матрица A = np.ones ([10,10]) и матрица B = np.array ([[2,2,2], [2,2,2], [2,2,2]] ). Теперь я хочу добавить матрицу B в A, но в определенных c позициях, строках 2,6,7 и столбцах 2,6,7.

Как мне сделать, чтобы получить следующую матрицу:

[[1,1,1,1,1,1,1,1,1,1],
 [1,1,1,1,1,1,1,1,1,1],
 [1,1,3,1,1,1,3,3,1,1],
 [1,1,1,1,1,1,1,1,1,1],
 [1,1,1,1,1,1,1,1,1,1],
 [1,1,1,1,1,1,1,1,1,1],
 [1,1,3,1,1,1,3,3,1,1],
 [1,1,3,1,1,1,3,3,1,1],
 [1,1,1,1,1,1,1,1,1,1],
 [1,1,1,1,1,1,1,1,1,1]]

Я больше привык к Matlab, и там это выглядело бы примерно так: A ((3,7,8), (3,7,8)) = A ((3,7,8) ), (3,7,8)) + B. Я попробовал нечто подобное в Python, но размеры не совпадали.

1 Ответ

1 голос
/ 11 апреля 2020

Вот один из способов сделать это:

Для многомерного индексирования в Python требуется, чтобы вы явно индексировали каждую ячейку. Поэтому вам нужно сначала создать индексирование, а затем использовать его следующим образом:

ind = np.array([[2,6,7]])   # Notice the 2D array
rows = np.broadcast_to(ind.transpose(), (3,3))
cols = np.broadcast_to(ind, (3,3))
A[rows, cols]+=B  # A cell from rows matrix and a corresponding cell in cols matrix together form one cell index.

Вывод:

array([[1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
   [1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
   [1, 1, 3, 1, 1, 1, 3, 3, 1, 1],
   [1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
   [1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
   [1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
   [1, 1, 3, 1, 1, 1, 3, 3, 1, 1],
   [1, 1, 3, 1, 1, 1, 3, 3, 1, 1],
   [1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
   [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]])

Прочитайте: https://docs.scipy.org/doc/numpy-1.13.0/user/basics.indexing.html

По какой-то причине, хотя следующее выбирает правильную матрицу из A, присвоение ей не работает:

ind_1 = np.array([2,6,7])
A[ind_1,:][:, ind_1] = B # No error, but assignment does not take place
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...