Path: news.mathworks.com!not-for-mail From: "Steven_Lord" <slord@mathworks.com> Newsgroups: comp.soft-sys.matlab Subject: Re: how to vectorize this loop Date: Tue, 19 Apr 2011 09:41:34 -0400 Organization: MathWorks Lines: 62 Message-ID: <iok3dr$5gg$1@fred.mathworks.com> References: <ioinh4$f1g$1@fred.mathworks.com> <ioiqil$42j$1@fred.mathworks.com> NNTP-Posting-Host: ah-slord.dhcp.mathworks.com Mime-Version: 1.0 Content-Type: text/plain; format=flowed; charset="UTF-8"; reply-type=response Content-Transfer-Encoding: 7bit X-Trace: fred.mathworks.com 1303220475 5648 172.31.44.225 (19 Apr 2011 13:41:15 GMT) X-Complaints-To: news@mathworks.com NNTP-Posting-Date: Tue, 19 Apr 2011 13:41:15 +0000 (UTC) In-Reply-To: <ioiqil$42j$1@fred.mathworks.com> X-Priority: 3 X-MSMail-Priority: Normal Importance: Normal X-Newsreader: Microsoft Windows Live Mail 14.0.8089.726 X-MimeOLE: Produced By Microsoft MimeOLE V14.0.8089.726 Xref: news.mathworks.com comp.soft-sys.matlab:722737 "Roger Stafford" <ellieandrogerxyzzy@mindspring.com.invalid> wrote in message news:ioiqil$42j$1@fred.mathworks.com... > "Mateusz Gos" <webmaster24@wp.pl> wrote in message > <ioinh4$f1g$1@fred.mathworks.com>... >> hi, >> i would like to write the following loop in form of a vector, which I am >> guessing is possible (or not?): >> >> n = 1; >> for n = 1:20 >> R = mean(measurements(1:n)); >> n = n+1; >> end >> >> thanks, >> mat > - - - - - - - - > You should not have the "n = n+1;" line in there. The for-loop with n > takes care of advancing n. Also the line "n = 1;" is totally unnecessary > since the for-loop will start at n = 1 no matter how you set n in advance. > > As your code stands at present you are taking twenty different mean > operations, the first one the mean of the single number 1, then the mean > of the two number 1 and 2, then that of 1, 2, and 3, and so forth. Is > that what you had in mind? If so, all but the last one of these means > from 1 to 20 have been overwritten because you placed them in the same > variable R without indexing it with n. > > If all you want is the single mean of the numbers from 1 to 20, then do > this: > > R = mean(1:20); > > If you want the twenty different means, do this: > > R = zeros(20,1); > for n = 1:20 > R(n) = mean(1:n); > end For this particular problem, since the mean of a vector of values is the sum of the elements in the vector divided by the number of elements in the vector, you could use CUMSUM. % Sample data measurements = rand(1, 20); n = 20; % Engine R = cumsum(measurements(1:n))./(1:n); % Spot check the answer R(5) - mean(measurements(1:5)) -- Steve Lord slord@mathworks.com To contact Technical Support use the Contact Us link on http://www.mathworks.com