Python - 从较大的矩阵中提取较小的矩阵

时间:2016-04-18 11:19:47

标签: python matrix

我试图从Python中的11x5矩阵中提取特定的5x5矩阵。有谁知道最好的方法是什么?感谢。

编辑:这就是我所拥有的。

   [[ 1.0, 0.0, -0.0, 0.0, 0.0, 2.0, -0.1, -0.1, 0.3, -0.2, -0.3],
    [ 0.0, 1.0, 0.0, 0.0, 0.0, 3.0, -1.1, -0.6, 1.6, -1.2, -0.4],
    [ 0.0, 0.0, 1.0, 0.0, 0.0, 4.0, -2.0, -1.5, 2.7, -2.1, -0.8],
    [-0.0, -0.0, 0.0, 1.0, 0.0, 5.0, -0.6, -0.7, 0.9, -0.5, -0.6],
    [-0.0, -0.0, -0.0, -0.0, 1.0, 6.0, 0.0, -0.3, -0.4, 0.4, -0.2]]

我想在最后五列中制作一个矩阵。

3 个答案:

答案 0 :(得分:1)

没有numpy:

[row[-5:] for row in matrix]

答案 1 :(得分:0)

您可以将矩阵转换为numpy数组(假设它现在是基本的列表列表),然后使用高级numpy索引/切片:

>>> m = [[ 1.0, 0.0, -0.0, 0.0, 0.0, 2.0, -0.1, -0.1, 0.3, -0.2, -0.3],
...      [ 0.0, 1.0, 0.0, 0.0, 0.0, 3.0, -1.1, -0.6, 1.6, -1.2, -0.4],
...      [ 0.0, 0.0, 1.0, 0.0, 0.0, 4.0, -2.0, -1.5, 2.7, -2.1, -0.8],
...      [-0.0, -0.0, 0.0, 1.0, 0.0, 5.0, -0.6, -0.7, 0.9, -0.5, -0.6],
...      [-0.0, -0.0, -0.0, -0.0, 1.0, 6.0, 0.0, -0.3, -0.4, 0.4, -0.2]]
>>> M = np.array(m)
>>> M[:,-5:]
array([[-0.1, -0.1,  0.3, -0.2, -0.3],
       [-1.1, -0.6,  1.6, -1.2, -0.4],
       [-2. , -1.5,  2.7, -2.1, -0.8],
       [-0.6, -0.7,  0.9, -0.5, -0.6],
       [ 0. , -0.3, -0.4,  0.4, -0.2]])

答案 2 :(得分:0)

使用 Numpy 。从任何矩阵中提取任何大小的子矩阵。

def submatrix( matrix, startRow, startCol, size):
    return x[startRow:startRow+size,startCol:startCol+size]

<强>测试

>>>>import numpy as np
>>> a = [[ 1.0, 0.0, -0.0, 0.0, 0.0, 2.0, -0.1, -0.1, 0.3, -0.2, -0.3],
...     [ 0.0, 1.0, 0.0, 0.0, 0.0, 3.0, -1.1, -0.6, 1.6, -1.2, -0.4],
...     [ 0.0, 0.0, 1.0, 0.0, 0.0, 4.0, -2.0, -1.5, 2.7, -2.1, -0.8],
...     [-0.0, -0.0, 0.0, 1.0, 0.0, 5.0, -0.6, -0.7, 0.9, -0.5, -0.6],
...     [-0.0, -0.0, -0.0, -0.0, 1.0, 6.0, 0.0, -0.3, -0.4, 0.4, -0.2]]
>>> 
>>> x = np.array(a)
>>> def submatrix( matrix, startRow, startCol, size):
...     return x[startRow:startRow+size,startCol:startCol+size]
... 
>>> print submatrix( a, 2, 4, 5)
[[ 0.   4.  -2.  -1.5  2.7]
 [ 0.   5.  -0.6 -0.7  0.9]
 [ 1.   6.   0.  -0.3 -0.4]]

由于此处的起始行为2,因此仅打印3行。