поиск ближайшего значения

Автор shaxter, 18 января 2023, 11:20

0 Пользователи и 1 гость просматривают эту тему.

shaxter

Добрый день! Прошу помочь в следующем вопросе:

Имеются значения температур от времени(данные температуры снимаются каждые 2 сек).
Необходимо найти время достижения температуры 50 градусов и максимальной температуры.
Т.е. необходимо сначала найти ближайшее значение к 50 градусам( не большее или меньшее, а ближайшее) и на основании этого выбрать время. Но температура не всегда меняется есть повторяющиеся значения по времени и если так происходит, то необходимо выбрать меньшее время. Аналогично с максимальной.
В данных температуры могут присутствовать текст, т.к. на основании данных строятся графики и нулевые значения замыкают графики. 
Пример во вложении. 

bigor

Добрый

Проверяйте, для 50
=INDEX(A2:A752;MATCH(MIN(ABS(50-IF(ISNUMBER(B2:B752);B2:B752;0)));ABS(50-IF(ISNUMBER(B2:B752);B2:B752;0));0))для максимальной чуть попроще
=INDEX(A2:A752;MATCH(MAX(B2:B752);B2:B752;0))
обе массивные
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

shaxter

 :beer: спасибо!!! Все отлично работает!!!!

eeigor

#3
Цитата: shaxter от 18 января 2023, 11:20...температура не всегда меняется: есть повторяющиеся значения [температуры] по времени, и если так происходит, то необходимо выбрать меньшее время.
@bigor, добрый день! Я не смотрел пример (гляжу с телефона на первую формулу), вопрос:
При повторении температуры функция MIN вернёт значение (по модулю) первой встретившейся записи (с меньшим значением времени), а MATCH – её позицию, так?
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

mikekaganski

Цитата: eeigor от 21 февраля 2023, 07:58При повторении температуры функция MIN вернёт значение первой встретившейся записи с меньшим значением времени, а MATCH – её позицию, так?

Для MATCH вопрос имеет смысл (ответ - да при третьем параметре 0), но для MIN - нет. MIN выдаёт наименьшее значение в наборе, а для этого он просматривает весь набор. При этом это значение не привязано к конкретному элементу набора.
С уважением,
Михаил Каганский

eeigor

Формула интересная: все условия обработаны очень корректно.
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

economist

Для сравнения, то же самое на Python/Pandas:
(prim.температура-50).abs().idxmin()       # Timestamp('00:14:38')
prim.температура.idxmax()                  # Timestamp('00:22:50')
abs((prim.температура-50).abs().min()-50)  # 49.951171875


prim - это таблица в RAM (dataframe), которая создается при чтении ODS-файла, температура - это поле этой таблицы, а idxmin() и idxmax() - специализированные numpy-методы для возврата индекса (т.е. заголовка строки) с "минимальной" и "максимальной" величиной из столбца. На расчет Pandas тратит 0.0005 секунды. Если таблица будет из миллионов строк, что в случае с IoT обычное дело, применение чего-то типа Pandas становится, как правило, неизбежным.
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...