Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在numpy中获得给定大小的所有子矩阵?_Python_Numpy_Submatrix - Fatal编程技术网

Python 如何在numpy中获得给定大小的所有子矩阵?

Python 如何在numpy中获得给定大小的所有子矩阵?,python,numpy,submatrix,Python,Numpy,Submatrix,例如,x=np.random.randintlow=0,high=10,shape=6,6给出了一个6x6 numpy数组: array([[3, 1, 0, 1, 5, 4], [2, 9, 9, 4, 8, 8], [2, 3, 4, 3, 2, 9], [5, 8, 4, 5, 7, 6], [3, 0, 8, 1, 8, 0], [6, 7, 1, 9, 0, 5]]) 我怎样才能得到所有2x3子矩阵的列表?不重叠的

例如,x=np.random.randintlow=0,high=10,shape=6,6给出了一个6x6 numpy数组:

array([[3, 1, 0, 1, 5, 4],
       [2, 9, 9, 4, 8, 8],
       [2, 3, 4, 3, 2, 9],
       [5, 8, 4, 5, 7, 6],
       [3, 0, 8, 1, 8, 0],
       [6, 7, 1, 9, 0, 5]])
我怎样才能得到所有2x3子矩阵的列表?不重叠的呢


我可以自己编写代码,但我确信这是一个非常常见的操作,它已经存在于numpy中,我就是找不到它。

本文中列出的是一种获得具有给定形状的子矩阵列表的通用方法。基于子矩阵的顺序是行C样式或列主要fortran方式,您有两种选择。以下是使用和的实现-

使用修改的示例输入运行示例-

In [201]: x
Out[201]: 
array([[5, 2, 5, 6, 5, 6, 1, 5],
       [1, 1, 8, 4, 4, 5, 2, 5],
       [4, 1, 6, 5, 6, 4, 6, 1],
       [5, 3, 7, 0, 5, 8, 6, 5],
       [7, 7, 0, 6, 5, 2, 5, 4],
       [3, 4, 2, 5, 0, 7, 5, 0]])

In [202]: split_submatrix(x,(3,4))
Out[202]: 
[array([[[5, 2, 5, 6],
         [1, 1, 8, 4],
         [4, 1, 6, 5]]]), array([[[5, 6, 1, 5],
         [4, 5, 2, 5],
         [6, 4, 6, 1]]]), array([[[5, 3, 7, 0],
         [7, 7, 0, 6],
         [3, 4, 2, 5]]]), array([[[5, 8, 6, 5],
         [5, 2, 5, 4],
         [0, 7, 5, 0]]])]

In [203]: split_submatrix(x,(3,4),order='F')
Out[203]: 
[array([[5, 2, 5, 6],
        [1, 1, 8, 4],
        [4, 1, 6, 5]]), array([[5, 3, 7, 0],
        [7, 7, 0, 6],
        [3, 4, 2, 5]]), array([[5, 6, 1, 5],
        [4, 5, 2, 5],
        [6, 4, 6, 1]]), array([[5, 8, 6, 5],
        [5, 2, 5, 4],
        [0, 7, 5, 0]])]

在一个数组中有许多关于窗口的SO q和a。一些使用解决方案。有关更多的跨步技巧实现,请参阅和从中提取补丁
In [201]: x
Out[201]: 
array([[5, 2, 5, 6, 5, 6, 1, 5],
       [1, 1, 8, 4, 4, 5, 2, 5],
       [4, 1, 6, 5, 6, 4, 6, 1],
       [5, 3, 7, 0, 5, 8, 6, 5],
       [7, 7, 0, 6, 5, 2, 5, 4],
       [3, 4, 2, 5, 0, 7, 5, 0]])

In [202]: split_submatrix(x,(3,4))
Out[202]: 
[array([[[5, 2, 5, 6],
         [1, 1, 8, 4],
         [4, 1, 6, 5]]]), array([[[5, 6, 1, 5],
         [4, 5, 2, 5],
         [6, 4, 6, 1]]]), array([[[5, 3, 7, 0],
         [7, 7, 0, 6],
         [3, 4, 2, 5]]]), array([[[5, 8, 6, 5],
         [5, 2, 5, 4],
         [0, 7, 5, 0]]])]

In [203]: split_submatrix(x,(3,4),order='F')
Out[203]: 
[array([[5, 2, 5, 6],
        [1, 1, 8, 4],
        [4, 1, 6, 5]]), array([[5, 3, 7, 0],
        [7, 7, 0, 6],
        [3, 4, 2, 5]]), array([[5, 6, 1, 5],
        [4, 5, 2, 5],
        [6, 4, 6, 1]]), array([[5, 8, 6, 5],
        [5, 2, 5, 4],
        [0, 7, 5, 0]])]