Ускорение поиска самой длинной непрерывной последовательности/серии значений ⇐ Python
Ускорение поиска самой длинной непрерывной последовательности/серии значений
У меня есть маскированный набор данных за 30 лет, содержащий значения для дней, в которые наблюдалась волна тепла. Я хочу рассчитать возникновение самой продолжительной тепловой волны в каждой ячейке сетки. Приведенный ниже код работает нормально, когда я разрезаю набор данных за один год, и для получения результата требуется 2 или 3 минуты. Однако данные за 30 лет даже через час продолжают обрабатываться. Кто-нибудь может решить проблему?
ff — это xarray.DataArray, который содержит три измерения = 't2m' время: 10958 широта: 27 долгота: 21
fs = hw.where(hw.rolling(time=3).count()==3).sel(time=slice('1991','2020')) фф = фс время = 0 лати = 0 лонги = 0 для t в диапазоне (1, ff.shape[0]*ff.shape[1]*ff.shape[2]): # Добавляем текущее значение к значению предыдущего временного шага если np.any(ff[tim, lati, longi] > 1): ff[тим, лати, лонги] = 1 еще: ff[тим, лати, лонги] = 0 лонги = лонги + 1 если лонги == 21: лонги = 0 лати = лати + 1 если лати == 27: лати = 0 Тим = Тим + 1 если время == 10959: перерыв время = 0 лати = 0 лонги = 0 для t в диапазоне (1, ff.shape[0]*ff.shape[1]*ff.shape[2]): # Добавляем текущее значение к значению предыдущего временного шага if np.any(ff[tim, lati, longi] == 1): ff[tim, lati, longi] = ff[tim, lati, longi] + ff[tim-1, lati, longi] еще: ff[тим, лати, лонги] = ff[тим, лати, лонги] лонги = лонги + 1 если лонги == 21: лонги = 0 лати = лати + 1 если лати == 27: лати = 0 Тим = Тим + 1 если время == 10959: перерыв ff_max = ff.max(ось=0)
У меня есть маскированный набор данных за 30 лет, содержащий значения для дней, в которые наблюдалась волна тепла. Я хочу рассчитать возникновение самой продолжительной тепловой волны в каждой ячейке сетки. Приведенный ниже код работает нормально, когда я разрезаю набор данных за один год, и для получения результата требуется 2 или 3 минуты. Однако данные за 30 лет даже через час продолжают обрабатываться. Кто-нибудь может решить проблему?
ff — это xarray.DataArray, который содержит три измерения = 't2m' время: 10958 широта: 27 долгота: 21
fs = hw.where(hw.rolling(time=3).count()==3).sel(time=slice('1991','2020')) фф = фс время = 0 лати = 0 лонги = 0 для t в диапазоне (1, ff.shape[0]*ff.shape[1]*ff.shape[2]): # Добавляем текущее значение к значению предыдущего временного шага если np.any(ff[tim, lati, longi] > 1): ff[тим, лати, лонги] = 1 еще: ff[тим, лати, лонги] = 0 лонги = лонги + 1 если лонги == 21: лонги = 0 лати = лати + 1 если лати == 27: лати = 0 Тим = Тим + 1 если время == 10959: перерыв время = 0 лати = 0 лонги = 0 для t в диапазоне (1, ff.shape[0]*ff.shape[1]*ff.shape[2]): # Добавляем текущее значение к значению предыдущего временного шага if np.any(ff[tim, lati, longi] == 1): ff[tim, lati, longi] = ff[tim, lati, longi] + ff[tim-1, lati, longi] еще: ff[тим, лати, лонги] = ff[тим, лати, лонги] лонги = лонги + 1 если лонги == 21: лонги = 0 лати = лати + 1 если лати == 27: лати = 0 Тим = Тим + 1 если время == 10959: перерыв ff_max = ff.max(ось=0)
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Регулярное выражение для поиска самой длинной последовательности 0 между 1 в двоичной строке
Anonymous » » в форуме JAVA - 0 Ответы
- 16 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Поиск самой длинной «численной последовательности» в строке, используя только одну регуляцию
Anonymous » » в форуме JAVA - 0 Ответы
- 3 Просмотры
-
Последнее сообщение Anonymous
-