Numpy 如何循环多维数组并将结果保存在数组中?

Numpy 如何循环多维数组并将结果保存在数组中?,numpy,multidimensional-array,numpy-ndarray,Numpy,Multidimensional Array,Numpy Ndarray,我想填充一个空的4D数组。我已经创建了一个预分配的数组(数据经过平滑处理),大小为80 x 80 x 44 x 50。我想循环所有(50)卷数据(data_4d),分别对它们进行平滑处理,并将结果存储在data_4d_平滑处理中。基本上: data_4d_smoothed = np.zeros(data_4d.shape) sigma = 0.7 for i in data_4d[:, :, :, i]: smoothed_vol = gaussian_filter(i, sigma=

我想填充一个空的4D数组。我已经创建了一个预分配的数组(数据经过平滑处理),大小为80 x 80 x 44 x 50。我想循环所有(50)卷数据(data_4d),分别对它们进行平滑处理,并将结果存储在data_4d_平滑处理中。基本上:

data_4d_smoothed = np.zeros(data_4d.shape)

sigma = 0.7
for i in data_4d[:, :, :, i]:
    smoothed_vol = gaussian_filter(i, sigma=sigma)
    data_4d_smoothed.append(smoothed_vol)

高斯滤波器应取每个体积(4d阵列的最后一个维度),进行运算,并将其保存到平滑后的数据中。但很明显,这不是2D数组,我想我需要一个嵌套循环来填充这个空列表。

我认为这应该在没有循环的情况下工作:

from scipy.ndimage import gaussian_filter
data_4d = np.random.rand(80,80,44,50)
data_4d_smoothed = gaussian_filter(data_4d, sigma = (sigma, sigma, sigma, 0))
基本上使最后一个维度的
sigma=0
,这样它就不会在该维度中进行卷积

检查:

data_4d_0 = gaussian_filter(data_4d[..., 0], sigma = sigma)  #filter first image

np.allclose(data_4d_0, data_4d_smoothed[..., 0])             #first image from global filter

True 

这给了我错误的答案。Sigma是函数的一个属性,与维数无关(高斯滤波器)。所以我认为这不适合:(该函数应该一个接一个地获取50个卷-最后一个维度-应用函数属性,然后将其作为4D数组再次保存在输出中。您没有使用
scipy.ndimage.gaussian_filter
?那么您使用的是什么?很抱歉,它起作用了!您能解释一下这里发生了什么吗?使用
sigma=0
高斯核的卷积只返回原始数组,因此在第四维中使用
0
作为
sigma
,只在前三维上进行卷积。