我想像下面这样计算密集矩阵A
,
1 0 2 0
0 0 0 0
3 0 4 0
0 0 0 0
通过更新子矩阵(动机是在演示有限元组件)。
在MATLAB / OCTAVE中,我可以这样做:
my_ind = [1,3];
A = zeros(4,4);
Aloc = [1,2;3,4];
A(my_ind,my_ind) = A(my_ind,my_ind) + Aloc;
使用Python和numpy,我可以做到这一点,显式地遍历本地子矩阵
import numpy as np
my_ind = np.array([0,2])
A = np.zeros([4,4])
Aloc = np.array([[1,2],[3,4]])
for iloc,i in enumerate(my_ind):
for jloc,j in enumerate(my_ind):
A[i,j] += Aloc[iloc,jloc]
有没有一种方法可以在不进行此显式迭代的情况下进行操作(理想情况下该方法接近MATLAB / OCTAVE版本的语法方便性)?
更新:进行操作的便捷方法是
import numpy as np
my_ind = np.array([0,2])
A = np.zeros([4,4])
Aloc = np.array([[1,2],[3,4]])
A[np.ix_(my_ind,my_ind)] += Aloc