5

現在、反復してこれを行っていますが、numpy 関数を使用してこのタスクを達成する方法が必要です。私の目標は、2D 配列を取得し、一度に J 列を平均して、元の配列と同じ行数で、列/J 列の新しい配列を生成することです。

だから私はこれを取りたい:

J = 2 // two columns averaged at a time

[[1 2 3 4]
 [4 3 7 1]
 [6 2 3 4]
 [3 4 4 1]]

これを生成します:

[[1.5 3.5]
 [3.5 4.0]
 [4.0 3.5]
 [3.5 2.5]]

このタスクを達成する簡単な方法はありますか? また、平均化されていない残りの列に終わらない場合の方法も必要です。たとえば、入力配列が 5 列で J=2 の場合、最初の 2 列を平均し、次に最後の 3 列を平均します。

あなたが提供できるどんな助けも素晴らしいでしょう。

4

2 に答える 2

4
data.reshape(-1,j).mean(axis=1).reshape(data.shape[0],-1)

あなたjが分割する場合data.shape[1]、それはです。

例:

In [40]: data
Out[40]: 
array([[7, 9, 7, 2],
       [7, 6, 1, 5],
       [8, 1, 0, 7],
       [8, 3, 3, 2]])

In [41]: data.reshape(-1,j).mean(axis=1).reshape(data.shape[0],-1)
Out[41]: 
array([[ 8. ,  4.5],
       [ 6.5,  3. ],
       [ 4.5,  3.5],
       [ 5.5,  2.5]])
于 2013-01-18T14:40:23.603 に答える
1

まず第一に、あなたは列をまったく平均化していないように見えます。一度に2つのデータポイントを平均化しているだけです。配列を再形成するのが最善のように思えます。そのため、に直接フィードできるNx2データ構造がありますmean。列の数に互換性がない場合は、最初にパディングする必要があります。次に、最後に、パディングされた剰余列とその前の列の加重平均を実行します。最後に、希望の形に戻します。

TheodrosZellekeによって提供された例をプレーオフするには:

In [1]: data = np.concatenate((data, np.array([[5, 6, 7, 8]]).T), 1)

In [2]: data
Out[2]: 
array([[7, 9, 7, 2, 5],
       [7, 6, 1, 5, 6],
       [8, 1, 0, 7, 7],
       [8, 3, 3, 2, 8]])

In [3]: cols = data.shape[1]

In [4]: j = 2

In [5]: dataPadded = np.concatenate((data, np.zeros((data.shape[0], j - cols % j))), 1)

In [6]: dataPadded
Out[6]: 
array([[ 7.,  9.,  7.,  2.,  5.,  0.],
       [ 7.,  6.,  1.,  5.,  6.,  0.],
       [ 8.,  1.,  0.,  7.,  7.,  0.],
       [ 8.,  3.,  3.,  2.,  8.,  0.]])

In [7]: dataAvg = dataPadded.reshape((-1,j)).mean(axis=1).reshape((data.shape[0], -1))

In [8]: dataAvg
Out[8]: 
array([[ 8. ,  4.5,  2.5],
       [ 6.5,  3. ,  3. ],
       [ 4.5,  3.5,  3.5],
       [ 5.5,  2.5,  4. ]])

In [9]: if cols % j:
    dataAvg[:, -2] = (dataAvg[:, -2] * j + dataAvg[:, -1] * (cols % j)) / (j + cols % j)
    dataAvg = dataAvg[:, :-1]
   ....:     

In [10]: dataAvg
Out[10]: 
array([[ 8.        ,  3.83333333],
       [ 6.5       ,  3.        ],
       [ 4.5       ,  3.5       ],
       [ 5.5       ,  3.        ]])
于 2013-01-18T14:40:57.243 に答える