【问题标题】:Splitting one NumPy array into two arrays将一个 NumPy 数组拆分为两个数组
【发布时间】:2018-04-10 22:23:26
【问题描述】:

假设我有一个NumPy2D数组A

>>> import numpy as np
>>> A=np.arange(30).reshape(3,10)
>>> A
array([[ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14, 15, 16, 17, 18, 19],
       [20, 21, 22, 23, 24, 25, 26, 27, 28, 29]])

我需要得到两个数组 BC 具有以下属性:

B = array([[ 0,  3,  4,  5,  6,  7,  8,  9],
           [10, 13, 14, 15, 16, 17, 18, 19],
           [20, 23, 24, 25, 26, 27, 28, 29]])

C = array([[ 1,  2],
           [11, 12],
           [21, 22]])

最简单的方法是什么?

请注意,我必须获得所有 C(2 个相邻列)和 B(即 A 没有 C)的集合。我尝试了不同的NumPy 构造,例如np.deletenp.hstack,但在上述示例中的拐角条件下似乎没有任何效果。

【问题讨论】:

    标签: python arrays numpy


    【解决方案1】:

    最简单的方法之一是使用索引来选择适当的列:

    >>> A[:, [1, 2]] # choose all rows from columns 1-2 (gives C)
    array([[ 1,  2],
           [11, 12],
           [21, 22]])
    
    >>> A[:, np.r_[0, 3:10]] # choose all rows from columns 0, 3-9 (gives B)
    array([[ 0,  3,  4,  5,  6,  7,  8,  9],
           [10, 13, 14, 15, 16, 17, 18, 19],
           [20, 23, 24, 25, 26, 27, 28, 29]])
    

    或者,您可以尝试 hsplit 拆分 A,然后将位重新连接在一起。这感觉比上面的索引方法效率低:

    >>> splits = np.hsplit(A, [1, 3]) 
    >>> B = np.hstack((splits[0], splits[2]))
    >>> C = splits[1]
    

    【讨论】:

      【解决方案2】:

      您可以使用数组花式索引:

      B = A[:, [0] + list(range(3, A.shape[1]))]
      C = A[:, [1, 2]]
      

      地点:

      • 逗号分隔您要从每个维度获取的索引。
      • 运营商: 告诉采取该维度的所有元素
      • 使用整数序列将指定应采用相应维度的哪些元素(例如[1, 2]

      【讨论】:

        【解决方案3】:

        对于C,您可以使用简单的切片:

        >>> A[:,1:3]
        array([[ 1,  2],
               [11, 12],
               [21, 22]])
        

        对于B,在A 的两个切片上使用numpy.hstack

        >>> np.hstack((A[:,:1], A[:,3:]))
        array([[ 0,  3,  4,  5,  6,  7,  8,  9],
               [10, 13, 14, 15, 16, 17, 18, 19],
               [20, 23, 24, 25, 26, 27, 28, 29]])
        >>> 
        

        【讨论】:

          猜你喜欢
          • 2020-10-22
          • 2012-04-13
          • 1970-01-01
          • 2020-06-25
          • 2015-05-17
          • 1970-01-01
          • 1970-01-01
          • 2019-07-01
          • 1970-01-01
          相关资源
          最近更新 更多