У меня есть массив numpy, в первом столбце которого указано время, а в других столбцах содержатся значения сигналов. Цель состоит в том, чтобы использовать алгоритм поиска пиков для всех столбцов значений сигнала и получить пики и соответствующие им времена. Мой код выглядит так:
import numpy as np
from peakutils import indexes
arr = stress_data.to_numpy()
times_all = arr[:,0]
peaks_all = []
width = 125
for i in range(1,np.shape(arr)[1]):
x = arr[:,i]
xf = x - np.mean(x)
threshold = 0.1*np.average(xf) / np.max(xf)
# Find x-coordinates of peaks in signal
peaks = indexes(xf, thres = threshold, min_dist = width)
sg = [times_all[peaks], xf[peaks]]
peaks_all.append(sg)
Этот код работает так, как и ожидалось, но проблема в том, что его запуск занимает много времени.
Я попытался оптимизировать его с помощью np.apply_along_axis и определить обработку функция для этого, но выполнение этого способа заняло еще больше времени. Вот код, который я использовал для этого:
def process_column(x):
xf = x - np.mean(x)
threshold = 0.1 * np.average(xf) / np.min(xf)
valleys = indexes(xf, thres=threshold, min_dist=width)
return [times_all[valleys], xf[valleys]]
valleys_all = np.apply_along_axis(process_column, axis=0, arr=data_all.T)
О массиве numpy: помимо столбца времени, необходимо обработать 10 столбцов и 10,8 миллиона строк. Будем признательны за любую помощь в оптимизации.
Отредактировано, добавлен пример стресс_данных:
| | DateTime | FirstCol | SecondCol |
|-| ------------------------- | ---------- | ----------- |
|0| 2023-11-30 00:00:58.688 | -23.811199 | -463.813599 |
|1| 2023-11-30 00:00:58.696 | -23.830700 | -463.848297 |
|2| 2023-11-30 00:00:58.704 | -23.845900 | -463.867615 |
|3| 2023-11-30 00:00:58.712 | -23.852900 | -463.875397 |
|4| 2023-11-30 00:00:58.720 | -23.844101 | -463.868500 |
Подробнее здесь: https://stackoverflow.com/questions/787 ... or-loop-wi
Как я могу использовать векторизацию или есть другой способ избежать использования цикла for с массивом numpy? ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение