[Numpy-discussion] New (old) function proposal.

Tony Yu tsyu80 at gmail.com
Tue Feb 18 14:55:35 EST 2014


On Tue, Feb 18, 2014 at 11:11 AM, Jaime Fernández del Río <
jaime.frio at gmail.com> wrote:

>
>
>
> On Tue, Feb 18, 2014 at 9:03 AM, Charles R Harris <
> charlesr.harris at gmail.com> wrote:
>
>>
>>
>>
>> On Tue, Feb 18, 2014 at 9:40 AM, Nathaniel Smith <njs at pobox.com> wrote:
>>
>>> On 18 Feb 2014 11:05, "Charles R Harris" <charlesr.harris at gmail.com>
>>> wrote:
>>> >
>>> > Hi All,
>>> >
>>> > There is an old ticket, #1499, that suggest adding a segment_axis
>>> function.
>>> >
>>> > def segment_axis(a, length, overlap=0, axis=None, end='cut',
>>> endvalue=0):
>>> >     """Generate a new array that chops the given array along the given
>>> axis
>>> >     into overlapping frames.
>>> >
>>> >     Parameters
>>> >     ----------
>>> >     a : array-like
>>> >         The array to segment
>>> >     length : int
>>> >         The length of each frame
>>> >     overlap : int, optional
>>> >         The number of array elements by which the frames should overlap
>>> >     axis : int, optional
>>> >         The axis to operate on; if None, act on the flattened array
>>> >     end : {'cut', 'wrap', 'end'}, optional
>>> >         What to do with the last frame, if the array is not evenly
>>> >         divisible into pieces.
>>> >
>>> >             - 'cut'   Simply discard the extra values
>>> >             - 'wrap'  Copy values from the beginning of the array
>>> >             - 'pad'   Pad with a constant value
>>> >
>>> >     endvalue : object
>>> >         The value to use for end='pad'
>>> >
>>> >
>>> >     Examples
>>> >     --------
>>> >     >>> segment_axis(arange(10), 4, 2)
>>> >     array([[0, 1, 2, 3],
>>> >            [2, 3, 4, 5],
>>> >            [4, 5, 6, 7],
>>> >            [6, 7, 8, 9]])
>>> >
>>> >
>>> > Is there and interest in having this function available?
>>>
>>> I'd use it, though haven't looked at the details of this api per set yet.
>>>
>>> rolling_window or shingle are better names.
>>>
>>> It should probably be documented and implemented to return a view when
>>> possible (using stride tricks). Along with a note that whether this is
>>> possible depends heavily on 32- vs. 64-bitness.
>>>
>>
>> I believe it does return views when possible. There are two patches
>> attached to the issue, one for the function and another for tests. So here
>> is an easy commit for someone ;) The original author seems to be Anne
>> Archibald, who should be mentioned if this is put in.
>>
>> Where does 'shingle' come from. I can see the analogy but haven't seen
>> that as a technical term.
>>
>
> In an inkjet printing pipeline, one of the last steps is to split the
> image into the several passes that will be needed to physically print it.
> This is often done with a tiled, non-overlapping mask, known as a
> "shingling mask."
>
>
Just for reference, scikit-image has a similar function (w/o padding)
called `view_as_blocks`:

http://scikit-image.org/docs/0.9.x/api/skimage.util.html#view-as-blocks

(and a rolling-window version called `view_as_windows`).

Cheers,
-Tony
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/numpy-discussion/attachments/20140218/d7b97434/attachment.html>


More information about the NumPy-Discussion mailing list