Eu tenho uma matriz numpy 2D muito grande (A) e uma matriz 2D menor (B) que é menor em ambas as dimensões. B é quadrado. Eu tenho uma matriz de índice com o mesmo comprimento de B. Assim:
A = np.array([[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, 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]])
B = np.array([[2, 4, 5, 7],
[2, 7, 1, 3],
[6, 1, 3, 5],
[1, 6, 3, 2]])
Index = np.array([0, 1, 5, 6])
Desejo adicionar o conteúdo de B a A nas linhas e colunas definidas por Index. A não está necessariamente cheio de 0s, então precisa ser adicionado. O resultado ficaria assim:
R = np.array([2, 4, 0, 0, 0, 5, 7, 0, 0],
[2, 7, 0, 0, 0, 1, 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],
[6, 1, 0, 0, 0, 3, 5, 0, 0],
[1, 6, 0, 0, 0, 3, 2, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0]])
Já tentei fazer com isso:
A[Index, Index] += B
O que me dá o seguinte erroValueError: shape mismatch: value array of shape (4,4) could not be broadcast to indexing result of shape (4,)
Não entendo por que isso não funciona, porque posso fazer isso:
A[Index, Index[0]:Index[0]+4] = B
E todos os valores aparecerão nas linhas corretas, mas não nas colunas corretas. O que faz sentido, porque estou apenas dando a ele um bloco de 4 colunas para que apareça, mas gostaria que aparecesse nas colunas definidas por Index.
Eu também tentei np.add.at(A[Index], Index, B) o que me dá IndexError: index 6 is out of bounds for axis 0 with size 4.
Acho que não entendi porque está tentando acessar o índice 6 em B, que tem tamanho 4.