Nano Hash - криптовалюты, майнинг, программирование

Сумма элементов вектора с использованием интервалов

Допустим, у меня есть вектор с именем vect = [1 2 3 4 5 6 7 8 9] и еще один вектор с именем intervals = [1 3 6 9]. Можно ли получить другой вектор частичных сумм элементов в vest, используя intervals? Я хочу сделать что-то вроде этого:

Частичная сумма 1 = 1 + 2 + 3 (элементы от vect(1) до vect(3))

Частичная сумма 2 = 4 + 5 + 6 (элементы от vect(3 + 1) до vect(6))

Частичная сумма 3 = 7 + 8 + 9 (элементы от vect(6 + 1) до vect(9))

Итак, что я хочу сделать, это получить сумму первых элементов k, затем сумму других элементов k, начиная с первого, а не в предыдущей сумме и т. д.

Исходная проблема. Исходная проблема была такой: я получаю вектор со значениями n и значением k. Давайте сделаем t = max(v) / k интервалов. Теперь, сколько значений из n находится в интервале [0, t)? Как насчет [t, t * 2)? А как насчет [2*т, 3*т)? и т. д. До сих пор я использовал accumarray(v, 1), чтобы найти, сколько значений каждого из них у меня есть, и int = (0:max(v)/k:max(v)), чтобы построить вектор инверторов, но теперь мне нужно sum(accumarray(v, 1)), чтобы получить эти частичные суммы.

Если вы хотите протестировать, используйте это (http://pastebin.com/jCZ3qYhz: создано с помощью accumarray) и k = 16 , частичные суммы должны быть: 157, 167, 136, 251, 726, 1300, 1152.. Я хотел бы иметь возможность сделать это без цикла for/while :) Векторизация - это ключ!

Редактировать: чтобы получить первую сумму, я использую это: sum(accumarray(v, 1)(1:16)), для второй: sum(accumarray(v, 1)(17:32)), но я не знаю, как векторизовать эту операцию. Я пробовал это: i = (1:16:500). Затем sum(accumarray(v, 1)(i(1:length(i)) : i(2:length(i))), но это не совсем работает или я использую не то.


  • Кстати, у меня есть еще вопрос. Теперь у меня есть большой вектор с десятичными знаками и, как и раньше, некоторые ограничения. Как я могу подсчитать, сколько значений находится в каждом интервале? Acumarray, кажется, не работает с десятичными знаками, только с положительными целыми числами. 22.03.2016

Ответы:


1

Для первой проблемы я бы использовал это:

cs = cumsum(vect);
i2 = intervals(2:end);
result = [cs(i2(1)), diff(cs(i2))]

result =

     6    15    24

Это создаст кумулятивную сумму всех элементов, найдет концы части, а затем найти разности между суммами в конце частей (которые в точности являются суммами промежуточных элементов).

21.03.2016
  • Спасибо! Я адаптировал код, и он отлично работает. Я не знал о функции diff. Хорошего дня! 21.03.2016
  • Кстати, у меня есть еще вопрос. Теперь у меня есть большой вектор с десятичными знаками и, как и раньше, с некоторыми интервалами. Как я могу подсчитать, сколько значений находится в каждом интервале? Acumarray, кажется, не работает с десятичными знаками, только с положительными целыми числами. 22.03.2016
  • @Adi, вы можете использовать arrayfun с find, чтобы найти последний элемент intervals, строго меньший, чем x, для всех в vect, затем accumarray для подсчета. 22.03.2016
  • Да, строго меньше x, но я также хочу больше другого числа. Это будет что-то вроде x ›= intervals(k) & x ‹ intervals(k+1). Интервалы(k) это не целое число (всегда). Я не могу добиться этого легко... 23.03.2016
  • @Adi, вот почему я написал последний... Это предполагает, конечно, что intervals упорядочено 23.03.2016
  • @Adi, чтобы вы начали с примера: intervals = 1:1.1:8; find(intervals < 5.3, 1, 'last') 23.03.2016
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..