как я могу заменить матрицу на другую матрицу в непоследовательном порядке - PullRequest
0 голосов
/ 29 октября 2018

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

`
 a=np.zeros([15,15])
 B=np.ones([5,5])
 ind1=[0,1,2,3,4]
 ind2=[0,5,8,7,12]

 #Now I want to replace like this
 a[ind1,ind1]=a[ind1,ind1]+B
 #and
 a[ind2,ind2]=a[ind2,ind2]+B

`

Это очень легко сделать в Matlab, но я не знаю, почему в python индексация столбцов не работает со списком чисел?

Заранее спасибо

1 Ответ

0 голосов
/ 29 октября 2018

Ваша проблема связана с numpy, а не с Python. Узнайте об индексации в numpy - https://docs.scipy.org/doc/numpy-1.15.1/user/basics.indexing.html. На самом деле это не так уж и отличается от индексации MATLAB.

Например:

import numpy as np

a = np.zeros(shape=[15, 15], dtype=int)
b = np.ones(shape=[5, 5], dtype=int)

a[0:5, 0:5] += b

a[0:5, 5:10] += b * 2

ind_1 = [11, 6, 7, 12, 13]
ind_2 = [9, 7, 14, 13, 4]

a[np.ix_(ind_1, ind_2)] += b * 3

print(a)

Выход:

[[1 1 1 1 1 2 2 2 2 2 0 0 0 0 0]
 [1 1 1 1 1 2 2 2 2 2 0 0 0 0 0]
 [1 1 1 1 1 2 2 2 2 2 0 0 0 0 0]
 [1 1 1 1 1 2 2 2 2 2 0 0 0 0 0]
 [1 1 1 1 1 2 2 2 2 2 0 0 0 0 0]
 [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
 [0 0 0 0 3 0 0 3 0 3 0 0 0 3 3]
 [0 0 0 0 3 0 0 3 0 3 0 0 0 3 3]
 [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
 [0 0 0 0 3 0 0 3 0 3 0 0 0 3 3]
 [0 0 0 0 3 0 0 3 0 3 0 0 0 3 3]
 [0 0 0 0 3 0 0 3 0 3 0 0 0 3 3]
 [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]]
...