我如何以非序列顺序用另一个矩阵替换一个矩阵

时间:2018-10-29 11:16:21

标签: python-3.x numpy indexing matrix-multiplication

我想知道如何用行和列的非顺序顺序将一个大矩阵的一部分替换为另一个小矩阵。我的意思是

`
 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 :(得分:0)

您的问题全与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]]