creizlein Ответов: 4

Получить 10 средних значений из массива? Существует ли это вообще?


Пожалуйста, простите меня, потому что я честно не знаю, что я спрошу или что именно мне повезло, я думаю, что просто застрял в математической дилемме, но здесь все равно идет...

У меня есть большой набор чисел, то есть 50k или 100k чисел (десятичных), хранящихся в массиве
Они не различаются между собой, они могут или не могут повторяться, нет никаких ограничений.

Поскольку они представляют собой большой набор, мне нужно суммировать их, что-то вроде того, что делает среднее, но со средним я могу получить только 1 среднее из всего массива, и мне нужно получить 10 или 20 средних, или, другими словами, наиболее 10 значимых средних между всем набором чисел.

Есть ли такая операция, которую можно сделать, и если да, то как она называется, чтобы я мог искать дополнительную информацию?
Конечно мне нужно было бы иметь возможность подсчитать количество попаданий каждого среднего или суммарного числа


---

Чтобы придать этому немного больше смысла и контекста, я пытаюсь суммировать журнал данных из автомобиля, каждый "кадр" или "запись" поставляется со значением оборотов в минуту , которое, конечно, варьируется от 0 до 8000, я получаю тысячи этих записей, и мне нужно представить их в таблице оборотов и количество попаданий, полученных каждым "фиксированным" индексом.

В практическом примере предположим, что мы получили следующие значения для обработки

{10,50,90,50,10,400,450,300,550,900,950,1100,1200,1000,900}

оборотах | просмотров
-----|---------
100 | 5 Просмотров
500 | 4 просмотров
1000 | 6 просмотров

В этом примере я как бы сгруппировал похожие числа для простоты, я действительно знаю, как вычислить хиты и выяснить, к какому "индексу" должно идти каждое значение, но сначала мне нужно выяснить, какие индексы лучше всего подходят для таблицы.
Я создал эти 3 индекса (100,500,1000) фиксированными, но я не знаю, являются ли они лучшими индексами для разделения моих чисел, это может быть 500, 400 или 474, кто знает.

Именно в этой ситуации я обсуждаю, как это сделать, как найти лучшие индексы, которые могут даже варьироваться , они могут быть всего 3, а могут быть 10 или N, пользователь будет иметь возможность "разделить" индексы в том количестве, которое он пожелает.

Надеюсь, теперь это имеет немного больше смысла.

Что я уже пробовал:

Одна из идей, которые у меня были, заключается в следующем, но я не уверен, что это вообще имеет смысл

Возьмем массив.Max - Array.Min и разделите результат на количество сводок, которые я хочу иметь, в данном случае 10, а затем создайте 10 различных массивов с числами в этом диапазоне и получите эти средние значения. я.е:

Array.Min = 0
Array.max = 400
Необходимые резюме = 10

Создайте 10 массивов, первый с числами, которые идут от 0 до 40, второй 40 до 80, третий 80 до 120 и так далее, а затем вычислите среднее значение каждого массива.

проблема, которую я вижу в этом, заключается в том, что у меня потенциально не может быть никакого числа в диапазоне от 200 до 300, поэтому некоторые массивы будут пустыми, и их среднее значение не будет иметь смысла?

creizlein

Спасибо всем за их вклад. Я читал о статистике, но все еще не уверен в том, какой математический подход я должен использовать.

Чтобы придать этому немного больше смысла и контекста, я пытаюсь суммировать журнал данных из автомобиля, каждый "кадр" или "запись" поставляется со значением оборотов в минуту , которое, конечно, варьируется от 0 до 8000, я получаю тысячи этих записей, и мне нужно представить их в таблице оборотов и количество попаданий, полученных каждым "фиксированным" индексом.

В практическом примере предположим, что мы получили следующие значения для обработки

{10,50,90,50,10,400,450,300,550,900,950,1100,1200,1000,900}

оборотах | просмотров
-----|---------
100 | 5 Просмотров
500 | 4 просмотров
1000 | 6 просмотров

В этом примере я как бы сгруппировал похожие числа для простоты, я действительно знаю, как вычислить хиты и выяснить, к какому "индексу" должно идти каждое значение, но сначала мне нужно выяснить, какие индексы лучше всего подходят для таблицы.
Я создал эти 3 индекса (100,500,1000) фиксированными, но я не знаю, являются ли они лучшими индексами для разделения моих чисел, это может быть 500, 400 или 474, кто знает.

Именно в этой ситуации я обсуждаю, как это сделать, как найти лучшие индексы, которые могут даже варьироваться , они могут быть всего 3, а могут быть 10 или N, пользователь будет иметь возможность "разделить" индексы в том количестве, которое он пожелает.

Надеюсь, теперь это имеет немного больше смысла.

Maciej Los

Я думаю, никто не в состоянии догадаться, как получить таблицу оборотов из вышеприведенного набора чисел.
Я бы настоятельно посоветовал обратиться к поставщику автомобилей.

4 Ответов

Рейтинг:
2

User 7429338

Основываясь на ваших группах 0-40, 40-80 и т. д., Я ожидаю, что либо максимальное значение будет меньше, чем 400 или есть 11 групп. В моем примере я буду использовать максимальное значение меньше 400, но его легко настроить, если вы хотите 11 групп или если вы хотите, например, включить 400 в последнюю группу.

Вы могли бы сделать что-то вроде этого:

Dim array = New Decimal() {10, 20, 30, 80, 90, 100, 110, 120, 130, 140, 150, 160, 170, 180, 190, 200, 210, 220, 230, 240, 250, 260, 270, 280, 290, 300, 310, 320, 330, 340, 350, 360, 370, 380, 390}

Dim groups = New List(Of IEnumerable(Of Decimal))
For index As Integer = 0 To 9
    Dim lowerBound = index / 10 * 400
    Dim upperBound = (index + 1) / 10 * 400
    groups.Add(array.Where(Function(n) (n >= lowerBound And n < upperBound)))
Next

Dim averages = groups.Select(Function(g) If(g.Count > 0, g.Average(), -1))


"массив" содержит ряд значений с min 0 и max <400.
"группы" содержит группы со значениями от 0 до 40, от 40 до 80 и т. д.
"averages" содержит среднее значение для каждой из этих групп, или -1, если группа пуста.

Если вас не волнуют пустые группы (40-80 в моем примере кода), Вы можете сделать это более элегантно:

Dim groups = array.GroupBy(Function(n) Math.Floor(n / 40))
Dim averages = groups.Select(Function(g) g.Average())


creizlein

Я обновил этот вопрос с небольшим количеством контекста, надеясь, что теперь он имеет больше смысла.

Рейтинг:
1

Patrice T

Цитата:
Я пытаюсь суммировать журнал данных из автомобиля, каждый "кадр" или "запись" поставляется со значением оборотов в минуту , которое, конечно, варьируется от 0 до 8000, я получаю тысячи этих записей, и мне нужно представить их в таблице оборотов в минуту и количество попаданий, полученных каждым "фиксированным" индексом.

Я согласен с другими решениями, речь идет не о средних значениях, а скорее о бункерах и частотах.
Таким образом, вы должны определить ячейки (категории значений) и подсчитать количество значений в каждой ячейке.
Цитата:
Я создал эти 3 индекса (100,500,1000) фиксированными, но я не знаю, являются ли они лучшими индексами для разделения моих чисел, это может быть 500, 400 или 474, кто знает.

Я не знаю ни одного правила, чтобы выбрать, что идет в каждую корзину, единственный метод, который я могу придумать, - это метод проб и ошибок.
Вы можете обнаружить, что экстремальные значения бесполезны и что фиктивные бункеры справятся с ними. Например, автомобильный мотор не часто бывает ниже 500 оборотов в минуту.


Рейтинг:
0

CPallini

Цитата:
значит, некоторые массивы будут пустыми, и их среднее значение не будет иметь смысла?
Технически вы не можете вычислить среднее значение 0 выборок.

Обычно (статистика) для каждого диапазона сообщается количество выборок, попадающих в него, а не их среднее значение. Взгляните на это Частотное распределение - Википедия[^].


creizlein

Я обновил этот вопрос с небольшим количеством контекста, надеясь, что теперь он имеет больше смысла.

Рейтинг:
0

Maciej Los

Прежде всего: я понятия не имею, почему вам нужно получить 10 или более средних значений из массива...

Кажется, ты говоришь о ... Статистика[^], особенно о понятиях Средний[^]. Их, по крайней мере, немного типы средних значений[^]: Среднеарифметический[^], Срединный[^], Геометрическая медиана[^], Режим (статистика)[^] и еще несколько...
Каждый из них предоставляет очень конкретную информацию о вашем наборе данных. Итак, в зависимости от того, какой статистический опрос вы хотите провести, вам нужно использовать соответствующий метод.
Представьте себе, что Ваш массив десятичных чисел представляет собой набор продаж продуктов во времени (недели, месяцы, кварталы, годы). Возможно, вы захотите разбить свой массив на подмножества (по продукту или времени), чтобы получить дополнительную информацию о продаже. Иногда, при анализе больших данных (для продажи на рынке), a скользящая (или бегущая) средняя[^] тоже используется.

Из-за моего слабого знания английского я не могу объяснить это больше... ;(


creizlein

Я обновил этот вопрос с небольшим количеством контекста, надеясь, что теперь он имеет больше смысла.