2017-10-29 7 views
0

bsxfun (빨리 작동합니다!) 및 arrayfun (내가 이해할 수있는 한 느리게 예상되는 내부적으로 루프를 사용합니다)은 적어도 다른 용도로 사용됩니다. 수평. arrayfun to bsxfun 가능

가이 말을하는 데, 나는 주어진 배열의 모든 숫자를 정리해

  1. 을 시도하고, 특정 인덱스
  2. 전에 숫자 인 (특정 위치에 번호를 추가, 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. y의 숫자는 위에 주어진대로 반복하지 않습니다. 이것은 단지 예일뿐입니다. [3 4 3 1 4 ...]

+1

['cumsum'] (https://www.mathworks.com/help/matlab/ref/cumsum.html)을 보셨습니까? – beaker

답변

1

x는 항상 1 : n 형식입니까? 대답을 '예'가정, 당신은 훨씬 더 빠르게 코드와 같은 결과를 얻을 수 있습니다 :

o2 = cumsum(y); 

사이드 참고 : 당신이 x의 정의에 괄호가 필요하지 않습니다.

+0

사실 나는 더 많은 조사를 통해 같은 결과를 얻었습니다 ;-) +1 –