2017-12-22 4 views
1

これはクイックなものです。 (短いループを使用して、他に)次の行を表現するより良い方法があるかどうかは疑問に思って:特定のステップサイズを持つ2次元配列の行の合計 - NumPy

energy = np.zeros((4, signal.shape[1])) 
energy[0::4, 0:] = np.sum(signal[0::4, :], axis=0) 
energy[1::4, 0:] = np.sum(signal[1::4, :], axis=0) 
energy[2::4, 0:] = np.sum(signal[2::4, :], axis=0) 
energy[3::4, 0:] = np.sum(signal[3::4, :], axis=0) 

答えて

1

を再形成二つに第一の軸を分割した後、これ等、これら2つの最初に沿って合計します -

energy = signal.reshape(-1,4,signal.shape[1]).sum(0) 

サンプルラン - 必ずしも行数と列について

In [327]: np.random.seed(0) 

In [328]: signal = np.random.randint(0,9,(8,5)) 

In [329]: energy = np.zeros((4, signal.shape[1])) 
    ...: energy[0::4, 0:] = np.sum(signal[0::4, :], axis=0) 
    ...: energy[1::4, 0:] = np.sum(signal[1::4, :], axis=0) 
    ...: energy[2::4, 0:] = np.sum(signal[2::4, :], axis=0) 
    ...: energy[3::4, 0:] = np.sum(signal[3::4, :], axis=0) 

In [330]: energy 
Out[330]: 
array([[ 13., 4., 6., 3., 10.], 
     [ 8., 5., 4., 7., 15.], 
     [ 7., 11., 11., 4., 13.], 
     [ 7., 8., 8., 5., 12.]]) 

In [331]: signal.reshape(-1,4,signal.shape[1]).sum(0) 
Out[331]: 
array([[13, 4, 6, 3, 10], 
     [ 8, 5, 4, 7, 15], 
     [ 7, 11, 11, 4, 13], 
     [ 7, 8, 8, 5, 12]]) 

複数4の、ここには一般的なバージョンがあります -

m = signal.shape[0] 
n = m//4 
energy = signal[:n*4].reshape(n,4,-1).sum(0) 
energy[:m%4] += signal[n*4:] 
+0

わかりました。ありがとうございました :) – sonovice

関連する問題