具有特定步长的二维数组的行总和-NumPy
这是一个快速的。我想知道是否有更好的方法来表达以下行(除了使用短循环):具有特定步长的二维数组的行总和-NumPy,numpy,Numpy,这是一个快速的。我想知道是否有更好的方法来表达以下行(除了使用短循环): 重塑将第一个轴拆分为两个,然后沿这两个轴中的第一个轴求和,如下所示- 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.s
重塑将第一个轴拆分为两个,然后沿这两个轴中的第一个轴求和,如下所示-
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:]
m = signal.shape[0]
n = m//4
energy = signal[:n*4].reshape(n,4,-1).sum(0)
energy[:m%4] += signal[n*4:]