Я знаю, что bsxfun (который работает быстро!) и arrayfun (насколько я понял, использует внутренние циклы, которые, как ожидается, будут медленными) предназначены для разных целей, по крайней мере, на самом базовом уровне.
Сказав это, я пытаюсь
- суммировать все числа в заданном массиве, скажем, y, до определенного индекса
- добавьте число в определенном месте (которое является числом в указанном выше месте индекса) к вышеуказанной сумме.
Я мог бы легко выполнить это с помощью приведенного ниже примера кода:
% index array
x = [ 1:6 ]; % value array
y = [ 3 3 4 4 1 1 ];
% arrayfun version
o2 = arrayfun(@(a) ...
sum(y(1:(a-1)))+...
y(a), ...
x)
Но, кажется, он медленный на больших входах.
Мне было интересно, как можно преобразовать это в версию, которая работает с bsxfun, если это возможно.
P.S. числа в y не повторяются, как указано выше, это был просто пример, это также может быть [3 4 3 1 4 ...]
cumsum
? - person beaker   schedule 29.10.2017