subsampling every nth entry in a numpy array

后端 未结 1 568
南旧
南旧 2020-11-28 07:02

I am a beginner with numpy, and I am trying to extract some data from a long numpy array. What I need to do is start from a defined position in my array, and then subsample

相关标签:
1条回答
  • 2020-11-28 07:20

    You can use numpy's slicing, simply start:stop:step.

    >>> xs
    array([1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4])
    >>> xs[1::4]
    array([2, 2, 2])
    

    This creates a view of the the original data, so it's constant time. It'll also reflect changes to the original array and keep the whole original array in memory:

    >>> a
    array([1, 2, 3, 4, 5])
    >>> b = a[::2]         # O(1), constant time
    >>> b[:] = 0           # modifying the view changes original array
    >>> a                  # original array is modified
    array([0, 2, 0, 4, 0])
    

    so if either of the above things are a problem, you can make a copy explicitly:

    >>> a
    array([1, 2, 3, 4, 5])
    >>> b = a[::2].copy()  # explicit copy, O(n)
    >>> b[:] = 0           # modifying the copy
    >>> a                  # original is intact
    array([1, 2, 3, 4, 5])
    

    This isn't constant time, but the result isn't tied to the original array. The copy also contiguous in memory, which can make some operations on it faster.

    0 讨论(0)
提交回复
热议问题