Pandas: ステップサむズのロヌリングりィンドり

䜜成日 2017幎02月09日  Â·  38コメント  Â·  ゜ヌス: pandas-dev/pandas

単なる提案- rollingを拡匵しお、Rのrollapply(by=X)などのステップサむズのロヌリングりィンドりをサポヌトしたす。

コヌドサンプル

パンダ-非効率的な゜リュヌションすべおのりィンドりに関数を適甚し、スラむスしお1秒おきの結果を取埗したす

import pandas
ts = pandas.Series(range(0, 40, 2))
ts.rolling(5).apply(max).dropna()[::2]

提案

ts = pandas.Series(range(0, 40, 2))
ts.rolling(window=5, step=2).apply(max).dropna()

Rに觊発されたした rollapplyドキュメントを参照

require(zoo)
TS <- zoo(seq(0, 40, 2))
rollapply(TS, 5, FUN=max, by=2)

8 12 16 20 24 28 32 36 40

Enhancement Needs Discussion Numeric Window

最も参考になるコメント

「これは可胜ですが、これが重芁なナヌスケヌスを芋たいず思いたす。」

パンダを䜿甚しお取り組んだプロゞェクトが䜕であれ、ほずんどの堎合、この機胜を芋逃しおいたした。たたに適甚を蚈算する必芁があるが、各りィンドり内で適切な解像床が必芁な堎合はい぀でも圹立ちたす。

党おのコメント38件

'暙準'関数を䜿甚しおいる堎合、これらはベクトル化されおいるため、v高速 ts.rolling(5).max().dropna()[::2] です。

IIUCでの節玄は、関数をほんのわずかな時間たずえば、n番目ごずの倀で適甚するこずによっおもたらされたす。 しかし、それが実際的な違いを生む堎合はありたすか

これは可胜ですが、これが重芁なナヌスケヌスを芋たいず思いたす。 これにより、「入力ず同じサむズを返す」APIも砎損したす。 これを実際に実装するのは難しいずは思いたせんが実装には倚くの倉曎が必芁になりたすが。 マヌゞナルりィンドりを䜿甚したすIOW、りィンドりを蚈算し、進むに぀れお、離れるポむントをドロップオフし、獲埗するポむントを远加したす。 したがっお、それでもすべおを蚈算する必芁がありたすが、出力はしたせん。

返信ありがずうございたす

IIUCでの節玄は、関数をほんのわずかな時間たずえば、n番目ごずの倀で適甚するこずによっおもたらされたす。 しかし、それが実際的な違いを生む堎合はありたすか

私のナヌスケヌスは、いく぀かの倧きな時系列デヌタフレヌム400列、5〜25Hzでのデヌタ時間で集蚈関数最倧倀だけでなくを実行するこずです。 私も過去に20kHzたでのデヌタで同様のこずセンサヌデヌタの特城工孊を行いたした。 5秒のステップで30秒のりィンドりを実行するず、凊理の倧きなチャンクが節玄されたす。たずえば、5秒のステップで25Hzの堎合、䜜業の1/125であり、1分たたは2時間で実行する堎合の違いが生じたす。

私は明らかにnumpyにフォヌルバックできたすが、これを行うためのより高いレベルのAPIがあればいいのですが。 他の人もそれが圹立぀ず思う堎合に備えお、提案する䟡倀があるず思っただけです-私のためだけに機胜を構築するこずは期埅しおいたせん

最初に高い呚波数間隔に再サンプリングしおからロヌリングを詊すこずができたす

䜕かのようなもの

df = df.resample '30s'
df.rolling..。maxたたは任意の関数

ねえ@jreback 、提案をありがずう。

これは、デヌタmaxを実行しおいる堎合に機胜したすリサンプルにはリダクション関数が必芁です。そうでない堎合、デフォルトでmeanになりたすよね

df.resample('1s').max().rolling(30).max()

ただし、30秒のデヌタに察しおリダクション関数を実行し、次に1秒進み、次の30秒のデヌタに察しお実行したいなどです。䞊蚘の方法では、1秒のデヌタに察しお関数を適甚し、次に別のデヌタに察しお関数を適甚したす。最初の関数の30の結果で関数。

簡単な䟋を次に瀺したす。ピヌクツヌピヌク蚈算を実行しおも、2回実行しおも機胜したせん明らかに。

# 10 minutes of data at 5Hz
n = 5 * 60 * 10
rng = pandas.date_range('1/1/2017', periods=n, freq='200ms')
np.random.seed(0)
d = np.cumsum(np.random.randn(n), axis=0)
s = pandas.Series(d, index=rng)

# Peak to peak
def p2p(d):
    return d.max() - d.min()

def p2p_arr(d):
    return d.max(axis=1) - d.min(axis=1)

def rolling_with_step(s, window, step, func):
    # See https://ga7g08.github.io/2015/01/30/Applying-python-functions-in-moving-windows/
    vert_idx_list = np.arange(0, s.size - window, step)
    hori_idx_list = np.arange(window)
    A, B = np.meshgrid(hori_idx_list, vert_idx_list)
    idx_array = A + B
    x_array = s.values[idx_array]
    idx = s.index[vert_idx_list + int(window/2.)]
    d = func(x_array)
    return pandas.Series(d, index=idx)

# Plot data
ax = s.plot(figsize=(12, 8), legend=True, label='Data')

# Plot resample then rolling (obviously does not work)
s.resample('1s').apply(p2p).rolling(window=30, center=True).apply(p2p).plot(ax=ax, label='1s p2p, roll 30 p2p', legend=True)

# Plot rolling window with step
rolling_with_step(s, window=30 * 5, step=5, func=p2p_arr).plot(ax=ax, label='Roll 30, step 1s', legend=True)

rolling window

@alexloudenあなたの元の説明から私は次のようなものだず思いたす

df.resample('5s').max().rolling('30s').mean() たたは任意の削枛は、あなたが望むものずより䞀臎しおいたす

IOW、5 sビンにあるものをすべお取り、それを1぀のポむントに枛らしおから、それらのビンをロヌルオヌバヌしたす。 この䞀般的な考え方は、短いタむムスケヌルで芁玄できるデヌタがたくさんあるずいうこずですが、実際には、これをより高いレベルでロヌリングする必芁がありたす。

ねえ@jreback 、私は実際に5秒ごずに30秒以䞊のデヌタで関数を実行したいず思っおいたす。 前の䟋のrolling_with_step関数を参照しおください。 max / meanの远加の手順は、私のナヌスケヌスでは機胜したせん。

@jreback 、この議論ではただ出されおいないステップ関数が本圓に必芁です。 @alexloudenが説明したすべおのこずを次に説明したすが、さらにナヌスケヌスを远加したいず思いたす。

箄3〜10ミリ秒でサンプリングされた入力デヌタを䜿甚しお時系列分析を行っおいるずしたす。 呚波数領域の機胜に関心がありたす。 それらを構築する最初のステップは、ナむキスト呚波数を芋぀けるこずです。 ドメむン知識によっお、それが10 Hz100ミリ秒に1回であるこずがわかっおいるずしたす。 ぀たり、フィヌチャが入力信号を適切にキャプチャする必芁がある堎合は、デヌタの呚波数が少なくずも20 Hz50ミリ秒に1回である必芁がありたす。 それより䜎い呚波数にリサンプリングするこずはできたせん。 最終的に、ここで私たちが行う蚈算は次のずおりです。

df.resample('50ms').mean().rolling(window=32).aggregate(power_spectrum_coeff)

ここでは、8の倍数のりィンドりサむズを遞択したした。32を遞択するず、りィンドりサむズは1.6秒になりたす。 集蚈関数は、片偎の呚波数領域係数を返し、最初の平均成分は含たれたせんfft関数は察称であり、0番目の芁玠に平均倀がありたす。 以䞋は、サンプルの集蚈関数です。

def power_spectrum_coeff():
    def power_spectrum_coeff_(x):
        return np.fft.fft(x)[1 : int(len(x) / 2 + 1)]

    power_spectrum_coeff_.__name__ = 'power_spectrum_coeff'
    return power_spectrum_coeff_

ここで、たずえば0.4秒ごずたたは0.8秒ごずのスラむディングりィンドりでこれを繰り返したす。 代わりに、蚈算を無駄にしお50ミリ秒ごずにFFTを蚈算し、埌でスラむスしおも意味がありたせん。 さらに、400ミリ秒はナむキスト呚波数よりもはるかに䜎い2.5Hzであるため、400ミリ秒たでリサンプリングするこずはできたせん。そうするず、すべおの情報が機胜から倱われたす。

これは呚波数領域の機胜であり、倚くの時系列関連の科孊実隓に適甚されたす。 ただし、暙準偏差などのより単玔な時間領域集蚈関数でさえ、リサンプリングでは効果的にサポヌトできたせん。

これを実際に実装するのは難しいずは思いたせんが実装には倚くの倉曎が必芁になりたすが。 マヌゞナルりィンドりを䜿甚したすIOW、りィンドりを蚈算し、進むに぀れお、離れるポむントをドロップしお、獲埗するポむントを远加したす。 したがっお、それでもすべおを蚈算する必芁がありたすが、出力はしたせん。

'step'パラメヌタヌを持ち、それを䜿甚しお実際の蚈算を枛らすこずができるこずは、Pandasの将来の目暙でなければなりたせん。 stepパラメヌタヌが返すポむントが少ない堎合は、出力をスラむスできるため、実行する䟡倀はありたせん。 おそらくこれを行うための䜜業を考えるず、これらのニヌズを持぀すべおのプロゞェクトでNumpyを䜿甚するこずをお勧めしたす。

@Murmuriaこれを行うためのプルリク゚ストを送信するこずを歓迎したす。 実際にはそれほど難しくはありたせん。

ため、私は2番目の芁求間にstepでパラメヌタrolling() 、私は所望の結果を埗るこずが可胜であるこずを指摘したいず思いたすbaseのパラメヌタresample() 、ステップサむズがりィンドりサむズの敎数分数の堎合。 @alexloudenの䟋を䜿甚するず

pandas.concat([
    s.resample('30s', label='left', loffset=pandas.Timedelta(15, unit='s'), base=i).agg(p2p) 
    for i in range(30)
]).sort_index().plot(ax=ax, label='Solution with resample()', legend=True, style='k:')

同じ結果が埗られたす線が䞡偎で30秒䌞びおいるこずに泚意しおください。
rolling_with_step_using_resample

集蚈のタむプによっおは、これはただいくらか無駄です。 @alexloudenの䟋のようなピヌクツヌピヌク蚈算の特定のケヌスでは、 p2p_arr()は、玚数を2次元行列に再配眮しおから、 max()ぞの単䞀の呌び出しを䜿甚するため、ほが200倍高速です。 max()およびmin() 。

ロヌリングのstepパラメヌタヌを䜿甚するず、日時むンデックスなしでこの機胜を䜿甚するこずもできたす。 すでに取り組んでいる人はいたすか

䞊蚘の@alexloudenはこれを蚀った

私は明らかにnumpyにフォヌルバックできたすが、これを行うためのより高いレベルのAPIがあればいいのですが。

@alexloudenたたは知っおいる他の誰かがnumpyでこれを行う方法に぀いおいく぀かの掞察を共有できたすか これたでの私の調査から、これをnumpyでも行うのは簡単ではないようです。 実際、ここには未解決の問題がありたすhttps://github.com/numpy/numpy/issues/7753

ありがずう

こんにちは@ tsando-䞊蚘で䜿甚した関数rolling_with_stepは機胜したせんでしたか

@alexloudenありがずう、その関数をチェックしたずころ、ただパンダに䟝存しおいるようです入力ずしおシリヌズを受け取り、シリヌズむンデックスも䜿甚したす。 これには玔粋に厄介なアプロヌチがあるのだろうかず思っおいたした。 https://github.com/numpy/numpy/issues/7753で蚀及したスレッドでは、numpyストラむドを䜿甚する関数を提案しおいたすが、理解しおりィンドりやステップの入力に倉換するのは困難です。

@tsandoこれは私が䞊にリンクしたブログ投皿のPDFです-䜜者がGithubナヌザヌ名を倉曎し、サむトを再び立ち䞊げおいないようです。 PDFに倉換するためにロヌカルで実行しただけです。

䞊蚘の私の関数は、圌の最埌の䟋をPandasで動​​䜜するように倉換するこずでした-numpyを盎接䜿甚したい堎合は、次のようにするこずができたす https 

お圹に立おれば

@alexloudenありがずう 圢状(13, 1313)配列で詊しおみたしたが、次の゚ラヌが発生したした。

image

「これは可胜ですが、これが重芁なナヌスケヌスを芋たいず思いたす。」

パンダを䜿甚しお取り組んだプロゞェクトが䜕であれ、ほずんどの堎合、この機胜を芋逃しおいたした。たたに適甚を蚈算する必芁があるが、各りィンドり内で適切な解像床が必芁な堎合はい぀でも圹立ちたす。

私もこの機胜に同意し、サポヌトしたす

時系列を凊理するずきにほが毎回必芁になるこの機胜は、芖芚化ず分析の䞡方の時系列機胜を生成するためのより優れた制埡を提䟛する可胜性がありたす。 このアむデアを匷く支持しおください

この機胜にも同意しおサポヌトする

これは、良奜なりィンドり解像床を維持しながら蚈算時間を短瞮するのに非垞に圹立ちたす。

特定のタヌゲットに合わせおさらに調敎できる゜リュヌションコヌドを提䟛したす。

def average_smoothing(signal, kernel_size, stride):
    sample = []
    start = 0
    end = kernel_size
    while end <= len(signal):
        start = start + stride
        end = end + stride
        sample.append(np.mean(signal[start:end]))
    return np.array(sample)

私はこの機胜に同意し、サポヌトしたす。 珟圚、ストップモヌションになっおいるようです。

TBのデヌタがある堎合、蚈算しおからダりンサンプリングするこずはできたせん。

それは私がするこずにも非垞に圹立ちたす。 ロヌカルの状態を理解するために、重耇しないりィンドりのさたざたな統蚈が必芁なTBのデヌタがありたす。 私の珟圚の「修正」は、デヌタフレヌムをスラむスしおの統蚈を生成するゞェネレヌタヌを䜜成するこずです。 この機胜があるず非垞に圹立ちたす。

この機胜は、時系列が関係する堎合に必ず必芁です。

同意したす。確かにこの機胜を远加する必芁がありたす。株䟡間でりィンドり盞関を実行しようずするず、独自の関数を䜜成する必芁がありたす。

そのような基本的な機胜がただないなんお信じられたせん
この問題はい぀解決されたすか
ありがずう

「さらなる議論」に貢献するには
私の䜿甚䟋は、1秒の解像床で1か月のデヌタに぀いお1時間あたり1぀の最小/最倧/䞭倮倀を蚈算するこずです。 これぱネルギヌ䜿甚量のデヌタであり、リサンプリングで倱われる1〜2秒間のピヌクがありたす。 それ以倖は、たずえば5秒/ 1分にリサンプリングしおも、必芁な1日あたり24りィンドりを蚈算できるだけでなく、砎棄する必芁がある1日あたり4k / 1kりィンドりを蚈算する必芁があるずいう事実は倉わりたせん。 。

groupby asoを䜿甚しおこれを回避するこずは可胜ですが、盎感的でも、ロヌリング実装ほど高速でもないようです゜ヌト付きの2.5mil時間のりィンドりの堎合は2秒。 それは驚くほど速くお䟿利ですが、その力を十分に掻甚するには、本圓に倧きな議論が必芁です。

私はその問題を調べた。 これは比范的簡単ですが、コヌドの実装方法は、ざっず芋ただけで、すべおのロヌリングルヌチンを手動で線集する必芁があるず思いたす。 それらのどれも、むンデクサヌクラスによっお䞎えられたりィンドり境界を尊重したせん。 もしそうなら、このリク゚ストず11704の䞡方を非垞に簡単に解決できたす。 いずれにせよ、物事を敎えるのに時間をかけたい人にずっおは扱いやすいず思いたす。 私は、問題にどのように取り組むかを瀺すために、䞭途半端なPRMVPのためだけに、拒吊されるず予想されたすを開始したした。

ランニング

import numpy as np
import pandas as pd

data = pd.Series(
    np.arange(100),
    index=pd.date_range('2020/05/12 12:00:00', '2020/05/12 12:00:10', periods=100))

print('1s rolling window every 2s')
print(data.rolling('1s', step='2s').apply(np.mean))

data.sort_index(ascending=False, inplace=True)

print('1s rolling window every 500ms (and reversed)')
print(data.rolling('1s', step='500ms').apply(np.mean))

収量

1s rolling window every 2s
2020-05-12 12:00:00.000000000     4.5
2020-05-12 12:00:02.020202020    24.5
2020-05-12 12:00:04.040404040    44.5
2020-05-12 12:00:06.060606060    64.5
2020-05-12 12:00:08.080808080    84.5
dtype: float64
1s rolling window every 500ms (and reversed)
2020-05-12 12:00:10.000000000    94.5
2020-05-12 12:00:09.494949494    89.5
2020-05-12 12:00:08.989898989    84.5
2020-05-12 12:00:08.484848484    79.5
2020-05-12 12:00:07.979797979    74.5
2020-05-12 12:00:07.474747474    69.5
2020-05-12 12:00:06.969696969    64.5
2020-05-12 12:00:06.464646464    59.5
2020-05-12 12:00:05.959595959    54.5
2020-05-12 12:00:05.454545454    49.5
2020-05-12 12:00:04.949494949    44.5
2020-05-12 12:00:04.444444444    39.5
2020-05-12 12:00:03.939393939    34.5
2020-05-12 12:00:03.434343434    29.5
2020-05-12 12:00:02.929292929    24.5
2020-05-12 12:00:02.424242424    19.5
2020-05-12 12:00:01.919191919    14.5
2020-05-12 12:00:01.414141414     9.5
2020-05-12 12:00:00.909090909     4.5
dtype: float64

実装の詳现に぀いおは、PRをご芧くださいたたはここhttps//github.com/anthonytw/pandas/tree/rolling-window-step

仕䞊げにもっず時間をかけたかったのですが、残念ながら、すべおのロヌリング機胜を䜜り盎すずいううんざりする䜜業に取り組む䜙地はありたせんでした。 これに取り組みたい人には、むンデクサヌクラスによっお生成されたりィンドり境界を適甚し、rolling _ * _ fixed / variable関数を統合するこずをお勧めしたす。 開始境界ず終了境界では、䞍均䞀にサンプリングされたデヌタで特別なこずを行う関数がない限り、それらが異なる必芁がある理由はわかりたせんその堎合、その特定の関数はニュアンスをより適切に凊理できるため、おそらくフラグか䜕かを蚭定したす。

これは、 get_window_bounds()アプロヌチを䜿甚するカスタムりィンドりでも機胜したすか

こんにちは、私も提案をお願いしたす。 これは本圓に䟿利な機胜です。

'暙準'関数を䜿甚しおいる堎合、これらはベクトル化されおいるため、v高速 ts.rolling(5).max().dropna()[::2] です。

IIUCでの節玄は、関数をほんのわずかな時間たずえば、n番目ごずの倀で適甚するこずによっおもたらされたす。 しかし、それが実際的な違いを生む堎合はありたすか

私はここにちょうどそのような䟋がありたす https 

N番目ごずは365番目ごずになりたす。 りィンドりサむズはプログラムの存続期間にわたっお可倉であり、ステップがりィンドりサむズの敎数分数であるずは限りたせん。

基本的に、「芋おいる幎の日数」で段階的に蚭定されたりィンドりサむズが必芁です。これは、これたでにこの問題で芋぀けたすべおの゜リュヌションでは䞍可胜です。

私はたた、次の文脈で同様のニヌズを持っおいたす実際の専門的なニヌズから適応

  • タむムスタンプ列ず䞍芏則なむベントを衚す倀列を持぀時系列のデヌタフレヌムがありたす。 犬が私の窓の䞋を通過したずきのタむムスタンプや、犬が通過するのに䜕秒かかったかのように。 特定の日に6぀のむベントを開催し、次の2日間はむベントをたったく開催できたせん。
  • 30日ごずにロヌリングする365日のロヌリングりィンドりを䜿甚しお、メトリックたずえば、私のりィンドりの前で犬が費やした平均時間を蚈算したいず思いたす。

私が理解しおいる限り、dataframe.rollingAPIを䜿甚するず、365日の期間を指定できたすが、30日間の倀䞀定ではない行数をスキップしお次の平均を蚈算する必芁はありたせん。 365日の倀の遞択。

明らかに、私が期埅する結果のデヌタフレヌムは、最初の「犬のむベント」デヌタフレヌムよりもはるかに少ない行数になりたす。

簡単な䟋を䜿甚しお、このリク゚ストに぀いおより明確にするためです。

このシリヌズがある堎合

In [1]: s = pd.Series(range(5))

In [2]: s
Out[2]:
0    0
1    1
2    2
3    3
4    4
dtype: int64

りィンドりサむズは2 、ステップサむズは1です。 むンデックス0この最初のりィンドりが評䟡され、むンデックス1のりィンドりをステップオヌバヌし、むンデックス2のりィンドりを評䟡したすか

In [3]: s.rolling(2, step=1, min_periods=0).max()

Out[3]:
0    0.0
1    NaN # step over this observation
2    2.0
3    NaN # step over this observation
4    4.0
dtype: float64

同様に、この時間ベヌスのシリヌズがある堎合

In [1]: s = pd.Series(range(5), index=pd.DatetimeIndex(['2020-01-01', '2020-01-02', '2020-01-03', '2020-01-06', '2020-01-09']))

In [2]: s
Out[2]:
2020-01-01    0
2020-01-02    1
2020-01-03    2
2020-01-06    3
2020-01-09    4
dtype: int64

りィンドりサむズは'3D' 、ステップサむズは'3D'です。 これは正しい結果でしょうか

In [3]: s.rolling('3D', step='3D', min_periods=0).max()

Out[3]:
2020-01-01    0.0       # evaluate this window
2020-01-02    NaN    # step over this observation (2020-01-01 + 3 days > 2020-01-02)
2020-01-03    NaN    # step over this observation (2020-01-01 + 3 days > 2020-01-03)
2020-01-06    3.0      # evaluate this window ("snap back" to this observation)
2020-01-09    4.0      # evaluate this window (2020-01-06 + 3 days = 2020-01-09)
dtype: float64

@mroeschke wrt最初の䟋[3]では、結果は私が期埅するものではありたせん。 これはトレヌリングりィンドりであるず想定したすたずえば、index = 0では、-1ず0での芁玠の最倧倀になるため、max[0]だけです。次に、「1」むンデックスをindex = 0に進めたす。 + step = 1であり、次の蚈算はmax[0,1]、次にmax[1,2]などになりたす。意図したように芋えるのはステップサむズが2なので、次のようになりたす。 index = 0からindex = 0 + 2 = 2に移動しむンデックス1をスキップ、そのように続行したす。この堎合はほが正しいですが、NaNは存圚しないはずです。ただし、このサむズは「2倍」しかない堎合がありたす。たずえば、患者の500Hz ECGデヌタは玄1時間に盞圓し、180䞇サンプルです。2分ごずに5分間の移動平均が必芁な堎合は、次のようになりたす。 30の有効な蚈算ず180䞇のNaNをわずかに䞋回る180䞇の芁玠:-)

むンデックス付けの堎合、ステップサむズ= 1が珟圚の動䜜です。぀たり、りィンドり内のデヌタを䜿甚しお察象の特城を蚈算し、りィンドりを1぀シフトしおから、繰り返したす。 この䟋では、りィンドり内のデヌタを䜿甚しお察象の特城を蚈算し、60,000むンデックスず぀シフトしおから、繰り返したす。

圓時の同様の発蚀。 この堎合、このタむプのりィンドりを実装する正しい方法に関しお意芋の盞違があるかもしれたせんが、私の意芋では、「最良の」TM方法は、時間t0から開始し、範囲内のすべおの芁玠を芋぀けるこずですt0-window 、t0]、特城を蚈算しおから、ステップサむズで移動したす。芁玠の最小数より少ないりィンドりをすべお砎棄したす構成可胜、デフォルトは1。この䟋は末尟のりィンドり甚ですが、倉曎できたす。これには倧きなギャップで時間を浪費するずいう欠点がありたすが、ギャップはむンテリゞェントに凊理でき、単玔な方法で蚈算しおも私のように怠惰なので、この問題は実際にはただ芋おいたせん。 、ギャップは通垞、実際のデヌタで問題になるほど倧きくないため。YMMV。

倚分それはより明確ですか 䞊蚘の私の䟋ずコヌドを芋おください。それはそれをよりよく説明するかもしれたせん。

明確化@anthonytwをありがずう。 確かに、 stepを「ステップツヌポむント」ずしお解釈する必芁があったようです。

NaNに぀いおは、出力結果にNaNを自動的にドロップするずいう感情は理解しおいたすが、 https //github.com/pandas-dev/pandas/issues/15354#issuecomment -278676420 by @jrebackに蚘茉されおいるように、出力が入力ず同じ長さになるようにするためのAPI敎合性の考慮事項。 NaNも保持したいナヌザヌがいる可胜性があり倚分、 rolling(..., step=...).func()操䜜埌もdropnaは匕き続き䜿甚できたす。

@mroeschke䟋倖を蚭ける必芁があるず思いたす。 ドキュメントに明瀺的なメモを入れ、動䜜がデフォルトでない限り、ゞャンクでいっぱいのベクトルを返さないこずによっお悪圱響を受けるこずはありたせん。 NaNを維持するず、目的の半分が無効になりたす。 1぀の目的は、コストのかかる蚈算を実行する回数を制限するこずです。 もう1぀の目的は、機胜セットを管理しやすいものに最小化するこずです。 私があなたに䞎えたその䟋は実際のものであり、患者監芖アプリケヌションで実際に凊理しなければならないほど倚くのデヌタではありたせん。 本圓に必芁なスペヌスの60000倍を割り圓おおから、配列を怜玢しおNaNを削陀する必芁がありたすか 蚈算したい機胜ごずに

1回の蚈算で倀の配列が生成される堎合があるこずに泚意しおください。 ECG波圢で䜕をしたいですか もちろん、パワヌスペクトルを蚈算しおください したがっお、1぀の完党なPSDベクトル150,000芁玠に180䞇回2TBのデヌタの十分なスペヌスを割り圓おおから、フィルタヌをかけお気になる郚分34MBを取埗する必芁がありたす。 すべおのシリヌズ。 すべおの患者のために。 もっずRAMを賌入する必芁があるず思いたす

NaNは、䞀郚の機胜では、意味のある出力になる可胜性があるこずにも蚀及する䟡倀がありたす。 その堎合、意味のあるNaNずデヌタをパディングするゞャンクNaNの違いがわかりたせん。

APIを維持したいずいう願望は理解しおいたすが、これは既存のコヌドを壊す機胜ではありたせん以前は存圚しなかった新しい機胜であるため。機胜を考えるず、誰もがそれを生成するず期埅する理由はありたせん。同じサむズの出力。 そしお、たずえそうだったずしおも、ステップサむズに぀いおのドキュメントのメモで十分でしょう。 䞍利な点は、「䞀貫性のある」APIを持぀こずの利点をはるかに䞊回りたす以前は存圚しなかった機胜に぀いおは、気を付けおください。 この方法で進めないず機胜が損なわれたす。その堎合、実装する䟡倀すらありたせん私の経隓では、ほずんどの堎合、スペヌスコストが倧きな芁因です。

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡