【问题标题】:Python. nwise numpy array iterationPython。 nwise numpy 数组迭代
【发布时间】:2017-11-27 17:07:10
【问题描述】:

是否有一个 numpy 函数可以有效地允许nwise 迭代?

# http://seriously.dontusethiscode.com/2013/04/28/nwise.html
from itertools import tee, islice
nwise = lambda xs, n=2: zip(*(islice(xs, idx, None) for idx, xs in enumerate(tee(xs, n))))

例如。将均值应用于元素?要获得移动平均线?

【问题讨论】:

    标签: python numpy


    【解决方案1】:

    一般用途:

    import numpy as np
    from numpy.lib.stride_tricks import as_strided
    
    def moving_slice(a, k):
        a = a.ravel()
        return as_strided(a, (a.size - k + 1, k), 2 * a.strides)
    

    移动平均更好:

    def moving_avg(a, k):
        ps = np.cumsum(a)
        return (ps[k-1:] - np.r_[0, ps[:-k]]) / k
    

    例子:

    a = np.arange(10)
    
    moving_avg(a, 4)
    # array([ 1.5,  2.5,  3.5,  4.5,  5.5,  6.5,  7.5])
    
    ms = moving_slice(a, 4)
    ms
    # array([[0, 1, 2, 3],
    #        [1, 2, 3, 4],
    #        [2, 3, 4, 5],
    #        [3, 4, 5, 6],
    #        [4, 5, 6, 7],
    #        [5, 6, 7, 8],
    #        [6, 7, 8, 9]])
    
    # no data are copied:
    a[4] = 0
    ms
    # array([[0, 1, 2, 3],
    #        [1, 2, 3, 0],
    #        [2, 3, 0, 5],
    #        [3, 0, 5, 6],
    #        [0, 5, 6, 7],
    #        [5, 6, 7, 8],
    #        [6, 7, 8, 9]])
    

    【讨论】:

    • 很好,给我一点时间来讨论那些... :)
    • 非常感谢您的回答!太聪明了
    猜你喜欢
    • 2011-12-28
    • 2018-09-26
    • 2021-06-02
    • 1970-01-01
    • 2013-01-04
    • 1970-01-01
    • 2013-05-05
    • 2011-10-03
    • 2016-01-28
    相关资源
    最近更新 更多