Усреднение при итерации по массиву - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть набор данных с именем MEL формы (94824,), в котором большинство экземпляров имеют форму (99, 13), но некоторые имеют меньшие формы.Он состоит из (плавающих) MEL частот.Я пытаюсь поместить все значения в пустую пустую матрицу формы (94824, 99, 13).Поэтому некоторые экземпляры оставлены пустыми.Есть предложения?

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

1 Ответ

0 голосов
/ 11 декабря 2018

Поскольку ваш массив 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...