0. SvoyakMartin 57 31.10.16 13:55 Сейчас в теме

Набор математических функций

Небольшой набор математических функций для работы с массивами чисел.

Перейти к публикации

Комментарии
Избранное Подписка Сортировка: Древо
1. Caliban 62 12.01.17 09:27 Сейчас в теме
Зачем такие сложности с суммой?

Функция Сумма(Массив) Экспорт
	Cумма = 0;
	
	Для Каждого Число Из Массив Цикл
		Сумма = Сумма + Число;
	КонецЦикла;
	
	Возврат Сумма;
КонецФункции
Показать
starik-2005; Diversus; v3rter; ice-net; +4 Ответить
4. SvoyakMartin 57 12.01.17 10:16 Сейчас в теме
(1) ситуация аналогична использованию упорядочивания массива для получения крайних вместо перебора.
Несмотря на то, что логично предположить, что получение итога по колонке выполняет ту же операцию сложения в цикле, а я предлагаю дополнительно тратить время и память на создание объекта и его заполнение, по замерам производительности в моём случае выигрывает тот вариант, что я предложил.
6. ice-net 14 12.01.17 10:20 Сейчас в теме
(4)
Ладно время, а как Вы проверяли производительность по памяти?
8. SvoyakMartin 57 12.01.17 11:00 Сейчас в теме
(6) Конкретно в моём случае в приоритете была скорость выполнения отчёта. С памятью же вроде всё очевидно: создавая новую сущность с целью копирования в неё данных можно рассчитывать, что памяти придётся выделить как минимум в два раза больше(например при передаче по значению), а при использовании списка значений и тем более таблицы значений и подавно!
9. ice-net 14 12.01.17 11:09 Сейчас в теме
(8)
Я не совсем это имел ввиду)) Я хотел узнать почему в функции Сумма используется ТЗ, а не перебор по массиву как в (1)?
5. v3rter 12.01.17 10:19 Сейчас в теме
Ну если изменения в процессе вызова функции исходного массива некритичны, то да.
Хотя считаю, что сумму и минимум лучше было делать "дедовскими" способами - циклом с условием и вспомогательной переменной, как в
(1)

Идея понравилась, за идею "звездану".
10. SvoyakMartin 57 12.01.17 11:09 Сейчас в теме
(5) Изменения в исходный массив вносит только упорядочивание. Если важна сохранность не только данных, но и их индексов, тогда да, стоит озадачиться данным вопросом.
2. v3rter 12.01.17 09:58 Сейчас в теме
Мне показалось

https://its.1c.ru/db/metod8dev#content:2606:hdoc
Передача параметров по ссылке

По умолчанию, во встроенном языке 1С:Предприятия 8 передача параметров в процедуры и функции осуществляется по ссылке. Это означает, что изменение формального параметра внутри процедуры или функции будет отражаться на значении фактического параметра, переданного при вызове процедуры или функции.

или надо было передавать по значению?
Функция Сумма(Знач Массив) Экспорт
3. ice-net 14 12.01.17 10:14 Сейчас в теме
(2)
Знач Массив - породит новую переменную Массив (в текущем контексте), что не есть Массив - передаваемый в параметр
=> пришлось бы писать что-нибудь типа
Массив = Сумма(Массив);

Функция Сумма(Знач Массив)
.....
Возврат Массив;
КонецФункции
7. Alias 148 12.01.17 10:23 Сейчас в теме
На всякий случай напоминаю о наличии в платформе объекта
Новый АнализДанных
в котором уже есть встроенные механизмы расчёта различных параметров, в том числе максимума/минимума, медианы, среднего, стандартного отклонения и др.

Надеюсь автор сравнивал свою разработку с использованием платформенных методов и выяснил, что она работает быстрее и лучше?...
vsozansky; корум; +2 Ответить
12. SvoyakMartin 57 12.01.17 11:51 Сейчас в теме
(7) Признаюсь, с данным классом был не знаком, и при поиске способа получения дисперсии и ср.кв. отклонения средствами платформы он мне так же не попадался. На досуге озадачусь изучением сего.
(11) За сравнение - спасибо, думаю, если объединить повторяющиеся вызовы, то общее время чуть сократится.
11. Alias 148 12.01.17 11:19 Сейчас в теме
Сравнил с платформенным методом.

За счет того что платформа получает сразу несколько параметров (напомню, для типа анализа АнализДанныхОбщаяСтатистика это Количество, Максимум,
Медиана, Минимум, Размах, Среднее, СтандартноеОтклонение), время выполнения анализа платформой больше, чем каждое из вычислений с использованием приведённых функций.
Для примера:
Анализ данных платформой: 100 мс (получены 7 параметров)
Расчет приведёнными функциями: медиана - 25 мс, среднее - 80 мс, макс/мин - по 20 мс

Таким образом, возможно, для получения единичного параметра (той же медианы) выгоднее использовать приведённую функцию. Ну это если не брать в расчёт то что она работает только с числами и не умеет, например, посчитать медиану по датам :)

Если нужно получить сразу пакет параметров -- то нужно или переделывать функции, оптимизируя получение за один проход, или всё же использовать платформенный механизм (т.к. судя по времени исполнения 100 всё же меньше чем 25+80+20+20).
Прикрепленные файлы:
Медиана.epf
13. v3rter 12.01.17 12:00 Сейчас в теме
В инженерных калькуляторах статистические функции сохраняют в памяти устройства количество элементов, сумму и сумму квадратов. Для расчета дисперсии этих данных достаточно. Я это к тому, что если надо считать ещё быстрее, то может каким-то образом сохранять или кешировать эти данные, вместе с минимумом и максимумом?
14. vasilev2015 739 12.01.17 12:08 Сейчас в теме
Предлагаю:

рядом с медианой добавить моду ))
вместо возведения во вторую степень POW использовать умножение на себя
вместо Количество()-1 использовать ВГраница()
15. SvoyakMartin 57 12.01.17 15:00 Сейчас в теме
(14) С модой не всё так просто, что делать, если попадётся мультимодальный массив? Можно посчитать по интервальной, но какой брать интервал?

POW(x, 2) vs x * x - повторюсь, что у меня в приоритете время выполнения, в единичных случаях простое умножение выигрывает, но в среднем наоборот.

ВГраница() - согласен! На 6 символов короче запись и быстрее в среднем в 5 раз!
16. Probot1c 04.02.17 06:10 Сейчас в теме
с набором функций и обработкой данных удобно в екселе работать, хорошо что в 1с что-то подобное есть.
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Программист 1С
Санкт-Петербург
зарплата от 130 000 руб. до 150 000 руб.
Полный день

Программист 1С
Санкт-Петербург
зарплата от 100 000 руб.
Полный день

Руководитель группы сервисов FRM на 1С
Москва
зарплата от 150 000 руб.
Полный день

Руководитель группы сервисов ЭДО, ЭЦП и криптографии
Москва
зарплата от 150 000 руб.
Полный день

Руководитель группы интеграций (1С)
Москва
зарплата от 150 000 руб.
Полный день