【问题标题】:Specific submatrix extraction in PythonPython中的特定子矩阵提取
【发布时间】:2020-03-18 21:43:50
【问题描述】:

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

如果我有一个矩阵

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 循环,因为我正在处理有限元代码。

【问题讨论】:

  • 可以直接索引....
  • python 是基于0 的索引。所以你会做A[[0,1,3], [0,1,3]]
  • @DanielMesejo 你能说得更准确点吗?
  • @QuangHoang 这不是基于 0 的索引问题...如果我这样做,我不会得到矩阵。
  • @DanielMesejo 是的,我知道。但是如果我按照 Quang 在评论中写的那样做,我会得到一个简单的数组,而不是所需的子矩阵

标签: python matlab matrix indexing


【解决方案1】:

如果你有这样的矩阵

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])

【讨论】:

    【解决方案2】:

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

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

    输出:

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

    【讨论】:

    • 完美!谢谢! :)
    猜你喜欢
    • 2021-10-14
    • 1970-01-01
    • 1970-01-01
    • 2017-02-10
    • 1970-01-01
    • 2018-10-20
    • 2018-09-23
    相关资源
    最近更新 更多