【问题标题】:Numpy extract submatrixNumpy 提取子矩阵
【发布时间】:2013-10-10 06:55:19
【问题描述】:

我是numpy 的新手,我很难理解如何从np.array 中提取具有已定义列和行的子矩阵:

Y = np.arange(16).reshape(4,4)

如果我想提取第 0 和第 3 列/行,我应该:

[[0 3]
 [12 15]]

我尝试了所有的重塑功能...但无法弄清楚如何做到这一点。有什么想法吗?

【问题讨论】:

    标签: python numpy


    【解决方案1】:

    试试np.ix_

    Y[np.ix_([0,3],[0,3])]
    

    这将返回您想要的结果:

    In [25]: Y = np.arange(16).reshape(4,4)
    In [26]: Y[np.ix_([0,3],[0,3])]
    Out[26]:
    array([[ 0,  3],
           [12, 15]])
    

    【讨论】:

      【解决方案2】:

      一种解决方案是通过切片/跨步来索引行/列。这是一个示例,您从第一列到最后一列(即第一列和第四列)每隔三列/行提取一次

      In [1]: import numpy as np
      In [2]: Y = np.arange(16).reshape(4, 4)
      In [3]: Y[0:4:3, 0:4:3]
      Out[1]: array([[ 0,  3],
                     [12, 15]])
      

      这将为您提供您正在寻找的输出。

      欲了解更多信息,请查看this page on indexing in NumPy

      【讨论】:

      • 我喜欢这个答案,因为该符号与 matlab 的符号相似
      【解决方案3】:
      print y[0:4:3,0:4:3]
      

      是最短且最合适的修复方法。

      【讨论】:

        【解决方案4】:

        首先,你的Y只有4个col和rows,所以没有col4或row4,最多col3或row3。

        要获得 0、3 列:Y[[0,3],:] 获取 0、3 行:Y[:,[0,3]]

        所以要得到你请求的数组:Y[[0,3],:][:,[0,3]]

        请注意,如果您只是Y[[0,3],[0,3]],则它等同于[Y[0,0], Y[3,3]],结果将包含两个元素:array([ 0, 15])

        【讨论】:

          【解决方案5】:

          您也可以使用:

          Y[[[0],[3]],[0,3]]
          

          这相当于使用索引数组:

          idx = np.array((0,3)).reshape(2,1)
          Y[idx,idx.T]
          

          要使广播按需要工作,您需要索引数组的非单一维度与您要索引到的轴对齐,例如对于一个 n x m 2D 子数组:

          Y[<n x 1 array>,<1 x m array>]
          

          这不会创建中间数组,不像 CT Zhu 的答案,它创建中间数组 Y[(0,3),:],然后索引到它。

          【讨论】:

            【解决方案6】:

            这也可以通过切片来完成:Y[[0,3],:][:,[0,3]]。更优雅的是,可以通过给定的行、列、页面等索引集对数组进行切片(甚至重新排序):

            r=np.array([0,3])
            c=np.array([0,3])
            print(Y[r,:][:,c]) #>>[[ 0  3][12 15]]
            

            重新排序试试这个:

            r=np.array([0,3])
            c=np.array([3,0])
            print(Y[r,:][:,c])#>>[[ 3  0][15 12]]
            

            【讨论】:

              猜你喜欢
              • 2018-02-11
              • 2015-09-04
              • 1970-01-01
              • 1970-01-01
              • 2021-10-14
              • 2017-05-09
              • 1970-01-01
              相关资源
              最近更新 更多