【问题标题】:Extending steps for slicing numpy arrays扩展切片 numpy 数组的步骤
【发布时间】:2019-08-31 13:21:25
【问题描述】:

我的问题类似这样:subsampling every nth entry in a numpy array

假设我有一个数组,如下所示: a = [1,2,2,2,3,4,1,2,2,2,3,4,1,2,2,2,3,4....]

如何扩展切片以便以特定间隔切片三个元素? IE。如何从数组中切片 2s? 我相信基本切片在这种情况下不起作用。

【问题讨论】:

    标签: python numpy


    【解决方案1】:

    您可以通过单独的索引来做到这一点。

    我们要从索引为 1 的元素开始,取 3 个元素,然后跳过 3 个元素:

    a = np.array([1, 2, 2, 2, 3, 4, 1, 2, 2, 2, 3, 4, 1, 2, 2, 2, 3, 4])
    
    start = 1
    take = 3
    skip = 3
    
    indices = np.concatenate([np.arange(i, i + take) for i in range(start, len(a), take + skip)])
    
    print(indices)
    print(a[indices])
    

    输出:

    [ 1  2  3  7  8  9 13 14 15]
    [2 2 2 2 2 2 2 2 2]
    

    【讨论】:

      【解决方案2】:

      这里似乎最简单:

       a = np.array([1,2,2,2,3,4,1,2,2,2,3,4,1,2,2,2,3,4])
       a.reshape(-1,6)[1:4].ravel()
      

      或者如果a 不能很好地分块:

      period = 6
      a.resize(np.math.ceil(a.size/period),period)
      a[:,1:4].ravel()
      

      【讨论】:

        【解决方案3】:

        这是一个带有masking 的矢量化文件-

        def take_sliced_regions(a, start, take, skip):
            r = np.arange(len(a))-start
            return a[r%(take+skip)<take]
        

        示例运行 -

        In [90]: a = np.array([1,2,2,2,3,4,1,2,2,2,3,4,1,2,2,2,3,4,1,2])
        
        In [91]: take_sliced_regions(a, start=1, take=3, skip=3)
        Out[91]: array([2, 2, 2, 2, 2, 2, 2, 2, 2, 2])
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-08-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-12-11
          相关资源
          最近更新 更多