遍历numpy数组时求平均值

时间:2018-12-11 20:38:31

标签: python loops numpy multidimensional-array mean

我有一个称为MEL的形状数据集(94824),其中大多数实例的形状为(99,13),但有些实例的形状较小。它由(浮动)MEL频率组成。我正在尝试将所有值放入形状为(94824、99、13)的空numpy矩阵中。因此,有些实例为空。有什么建议吗?

MEL type = numpy.ndarray
for i in MEL type(i) = <class 'numpy.ndarray'>
for j in i type (j) = <class 'numpy.ndarray'>

1 个答案:

答案 0 :(得分:1)

由于您的MEL数组的形状不均一,因此我们首先需要过滤出形状通用的数组(即(99, 13))。为此,我们可以使用:

filtered = []
for arr in MEL:
    if arr.shape == (99, 13):
        filtered.append(arr)
    else:
        continue

然后,我们可以初始化一个数组以保存结果。然后我们可以遍历此过滤后的数组列表并计算轴1上的均值,如:

averaged_arr = np.zeros((len(filtered), 99))

for idx, arr in enumerate(filtered):
    averaged_arr[idx] = np.mean(arr, axis=1)

这应该计算出所需的矩阵。


以下是一个演示示例,它假设所有阵列均具有相同的形状,可以重现您的设置:

# inputs 

In [20]: MEL = np.empty(94824, dtype=np.object)

In [21]: for idx in range(94824):
    ...:     MEL[idx] = np.random.randn(99, 13)

# shape of the array of arrays
In [13]: MEL.shape
Out[13]: (94824,)

# shape of each array
In [15]: MEL[0].shape
Out[15]: (99, 13)

# to hold results
In [17]: averaged_arr = np.zeros((94824, 99))

# compute average
In [18]: for idx, arr in enumerate(MEL):
    ...:     averaged_arr[idx] = np.mean(arr, axis=1)

# check the shape of resultant array
In [19]: averaged_arr.shape
Out[19]: (94824, 99)