繁体   English   中英

Python中的特定子矩阵提取

[英]Specific submatrix extraction in Python

这是一个非常简单的问题,但我找不到任何解决方案。

如果我有一个矩阵

A = np.array([[1,2,4,2],[1,2,35,4],[3,4,7,0],[8,3,2,6]])

我想提取由第一、第二和第四列第一第二和第四行组成的子矩阵

在 MATLAB 中,我会简单地做A([1,2,4],[1,2,4]) ,但我不能在 Python 中做到这一点。

有没有什么快速的方法可以做到这一点? 我需要避免 for 循环,因为我正在处理有限元代码。

您的问题的解决方案是np.ix_

A[np.ix_([0,1,3], [0,1,3])] 

输出:

array([[1, 2, 2],
       [1, 2, 4],
       [8, 3, 6]])

如果你有这样的矩阵

matrix = [
  [1, 2, 4, 2],
  [1, 2, 35, 4],
  [3, 4, 7, 0],
  [8, 3, 2, 6]
];

并且您需要恢复交叉的列和行,您希望得到以下结果:

    [1,2,4], [1,2,4]
    =>
    [
        [1:1 1:2 1:4]
        [2:1 2:2 2:4]
        [4:1 4:2 4:4]
    ]

这是一个简单的实现。

def subMatrix(m, cols, rows):
  result = []
  for col in cols:
    newRow = []
    for row in rows:
      newRow.append(m[col-1][row-1])
    result.append(newRow)
  return result

subMatrix(m=matrix, cols=[1,2,4], rows=[1,2,4])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM