【问题标题】:Split ndarray into smaller ndarray stored in a list将 ndarray 拆分为存储在列表中的较小的 ndarray
【发布时间】:2017-04-04 20:58:13
【问题描述】:

我目前正在寻找可以将 ndarray 拆分为更小的 ndarray 的方法。

示例:给定形状为 (78,1440,3) 的 ndarray,我想从中提取大小为 (78,72,3) 的较小 ndarray 的列表,这将是 20 个较小的子 ndarray。

我尝试使用numpy.split。

numpy.split(matrix,72,axis=1)

生成长度为 72 的列表 第一个条目的形状是 (78,20,3)..

为什么我无法提取我需要的尺寸?

【问题讨论】:

  • 在列表或array?
  • 因为72 是您将其拆分成的元素数。

标签: python numpy


【解决方案1】:

split 中的 72 是 元素个数,而不是拆分后的维度的大小(根据轴)。 p>

但是你可以使用:

numpy.split(matrix,<b>matrix.shape[1]//72</b>,axis=1)

将其拆分为 20 个长度为 72 的元素(对于您的给定情况)。请注意,您必须确保 shape[1] 可被 72 整除,否则将引发 ValueError。

【讨论】:

    【解决方案2】:

    方法#1:您可以使用专门为此任务制作的np.hsplit -

    np.hsplit(arr,20) # creates list of 20 arrays 
    

    示例运行 -

    1) 输入数组:

    In [52]: a = np.random.randint(0,9,(2,6,3))
    
    In [53]: a
    Out[53]: 
    array([[[7, 8, 8],
            [7, 7, 1],
            [1, 6, 4],
            [6, 3, 8],
            [4, 7, 4],
            [0, 6, 3]],
    
           [[0, 8, 5],
            [2, 2, 8],
            [6, 0, 7],
            [5, 4, 6],
            [4, 3, 1],
            [8, 6, 6]]])
    

    2) 将axis=1 拆分为3部分,因此每个部分/子数组的长度为(2,2,3) 形状。因此,我们将得到这 3 个数组的列表:

    In [54]: b = np.hsplit(a,3)
    

    3) 手动验证这些部分:

    In [55]: b[0]
    Out[55]: 
    array([[[7, 8, 8],
            [7, 7, 1]],
    
           [[0, 8, 5],
            [2, 2, 8]]])
    
    In [56]: b[1]
    Out[56]: 
    array([[[1, 6, 4],
            [6, 3, 8]],
    
           [[6, 0, 7],
            [5, 4, 6]]])
    
    In [57]: b[2]
    Out[57]: 
    array([[[4, 7, 4],
            [0, 6, 3]],
    
           [[4, 3, 1],
            [8, 6, 6]]])
    

    方法 #2: 此任务的另一个工具是 np.array_split -

    np.array_split(arr,20,axis=1)
    

    【讨论】:

      猜你喜欢
      • 2017-09-04
      • 2019-02-12
      • 1970-01-01
      • 2020-10-04
      • 1970-01-01
      • 1970-01-01
      • 2021-08-09
      • 2019-05-09
      • 2020-01-29
      相关资源
      最近更新 更多