1

以下に示す2つの列AとBを持つデータフレームDFがあります。

A                    B                  
1                    0             
3                    0               
4                    0                   
2                    1                    
6                    0                    
4                    1                     
7                    1                 
8                    1                     
1                    0   

最初の部分: 以下に示すように、スライディング ウィンドウ アプローチを実行する必要があります。サイズ 3 のスライディング ウィンドウで列 B の平均を計算する必要があります。各ウィンドウの平均値は手動で計算され、左側に表示されます。

    A:         1    3    4    2    6    4    7    8    1                                          
    B:         0    0    0    1    0    1    1    1    0                                
              [0    0    0]                                              0
                    [0    0    1]                                        0.33
                          [0    1    0]                                  0.33
                                [1    0    1]                            0.66
                                      [0    1    1]                      0.66
                                            [1    1    1]                1
                                                 [1    1    0]           0.66
output:        0   0.33 0.33 0.66   0.66    1     1    1   0.66

2番目の部分:列Aの各行/座標について、座標を含むすべてのウィンドウが考慮され、列「出力」に示されている結果を与える最高平均値を保持する必要があります。

2 番目の部分の詳細な説明: 1 番目の部分は、1 つの位置でスライドするスライディング ウィンドウ 3 の平均を計算しています。2 番目のステップは次のとおりです。列 A の座標「i」ごとに、座標「i」を含むすべてのウィンドウを評価し、最高の平均スコアを保持する必要があります。たとえば、列 A では、1 は最初のウィンドウにのみ存在するため、1 のスコアは 0 (最初のウィンドウの平均) です。同様に、2 は 1 番目と 2 番目のウィンドウに存在するため、2 のスコアは、window1 と window2 のスコアの中で最も高く、つまり max(0, 0.33333) になります。同様に、3 は 1 番目、2 番目、3 番目のウィンドウに存在するため、3 のスコアは最初の 3 つのウィンドウの最大スコア、つまり max(0,0.333333,0.3333333) になります。4 は 2 番目、3 番目、4 番目のウィンドウに存在するため、4 のスコアはこれらのウィンドウのスコアの最大値、つまり max(0.

上記のように出力を取得する必要があります。出力は次のようになります。

A                   B                  Output   
1                   0                      0
3                   0                      0.33
4                   0                      0.33
2                   1                      0.66
6                   0                      0.66
4                   1                      1
7                   1                      1
8                   1                      1
1                   0                    0.66

pythonで何か助けていただければ幸いです。

4

1 に答える 1

1

最初の部分では、次を使用しnumpyます。

WS = 3
B = numpy.array([0,0,0,1,0,1,1,1,0])
filt = numpy.ones(WS) / WS
mean = numpy.convolve(B, filt, 'valid')

2 番目の部分:

paddedmean = numpy.zeros(mean.size + 2 * (WS - 1))
paddedmean[WS-1:-(WS-1)] = mean
output = [numpy.max(paddedmean[i:i+WS]) for i in range(mean.size+WS-1)]

しかし、何Aのために使用されますか?

于 2013-04-12T17:14:25.780 に答える