numpy:根据行/列子索引列表

时间:2019-07-08 09:45:27

标签: python matlab numpy

我想像下面这样计算密集矩阵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

0 个答案:

没有答案