我有一个 3 维 numpy 数组,形状为 Nx64x64。我想通过取平均值在维度 1 和维度 2 上对其进行下采样,从而产生形状为 Nx8x8 的新数组。
我有几个工作实现,但我觉得必须有一种更简洁的方法来实现它。
我最初尝试使用 np.split:
def subsample(inparray, n):
inp = inparray.copy()
res = np.moveaxis(np.array(np.hsplit(inp, inp.shape[1]/n)), 1, 0)
res = np.moveaxis(np.array(np.split(res, inp.shape[2]/n, axis=3)), 1, 0)
res = np.mean(res, axis=(3,4))
return res
Run Code Online (Sandbox Code Playgroud)
我也尝试使用普通索引:
def subsample2(inparray, n):
res = np.zeros((inparray.shape[0], n, n))
lin = np.linspace(0, inparray.shape[1], n+1).astype(int)
bounds = np.stack((lin[:-1], lin[1:]), axis=-1)
for i, b in enumerate(bounds):
for j, b2 in enumerate(bounds):
res[:, i, j] = np.mean(inparray[:, b[0]:b[1], b2[0]:b2[1]], axis=(1,2))
return res
Run Code Online (Sandbox Code Playgroud)
我曾想过使用 …
我想使用韦尔奇的方法来计算二维场的功率谱密度。Scipy 中有一个可用的实现,但根据文档,它仅适用于一维时间序列。
有人知道适用于 2D 字段的实现吗?
到目前为止,我一直使用2D傅里叶变换来进行计算,但我听说这种方法对噪声敏感,而Welch的方法更稳健。