<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/239189</link>
    <title>MATLAB Central Newsreader - faster for loop</title>
    <description>Feed for thread: faster for loop</description>
    <language>en-us</language>
    <copyright>&amp;copy;1994-2012 by MathWorks, Inc.</copyright>
    <webmaster>webmaster@mathworks.com</webmaster>
    <generator>MATLAB Central Newsreader</generator>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <ttl>60</ttl>
    <image>
      <title>MathWorks</title>
      <url>http://www.mathworks.com/images/membrane_icon.gif</url>
    </image>
    <item>
      <pubDate>Thu, 13 Nov 2008 15:48:03 -0500</pubDate>
      <title>faster for loop</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/239189#610720</link>
      <author>Michael Lonther</author>
      <description>Hello,&lt;br&gt;
I would greatly appreciate if there is a non-FOR-loop version of this code.  It is very slow because I think it is very inefficient.  Thank you..&lt;br&gt;
&lt;br&gt;
% aggregate irr data to GADM values&lt;br&gt;
fid = fopen('file1.bin','rb');&lt;br&gt;
irrarea = fread(fid,'float');&lt;br&gt;
fclose(fid);&lt;br&gt;
clear fid;&lt;br&gt;
fid = fopen('file2.bin','rb');&lt;br&gt;
gadm = fread(fid,'float');&lt;br&gt;
fclose(fid);&lt;br&gt;
clear fid;&lt;br&gt;
&lt;br&gt;
num = unique(sort(gadm));&lt;br&gt;
num(1) = [];&lt;br&gt;
&lt;br&gt;
irrmean = zeros(4320*2160,1);&lt;br&gt;
for i = 1:length(num)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;a = find(gadm == num(i));&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;irrmean(a) = mean(irrarea(a));&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;clear a;&lt;br&gt;
end</description>
    </item>
    <item>
      <pubDate>Thu, 13 Nov 2008 16:15:04 -0500</pubDate>
      <title>Re: faster for loop</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/239189#610726</link>
      <author>Gavrilo Bozovic</author>
      <description>&quot;Michael Lonther&quot; &amp;lt;rsbu@yahoo.com&amp;gt; wrote in message &amp;lt;gfhi7j$str$1@fred.mathworks.com&amp;gt;...&lt;br&gt;
&amp;gt; Hello,&lt;br&gt;
&amp;gt; I would greatly appreciate if there is a non-FOR-loop version of this code.  It is very slow because I think it is very inefficient.  Thank you..&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; % aggregate irr data to GADM values&lt;br&gt;
&amp;gt; fid = fopen('file1.bin','rb');&lt;br&gt;
&amp;gt; irrarea = fread(fid,'float');&lt;br&gt;
&amp;gt; fclose(fid);&lt;br&gt;
&amp;gt; clear fid;&lt;br&gt;
&amp;gt; fid = fopen('file2.bin','rb');&lt;br&gt;
&amp;gt; gadm = fread(fid,'float');&lt;br&gt;
&amp;gt; fclose(fid);&lt;br&gt;
&amp;gt; clear fid;&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; num = unique(sort(gadm));&lt;br&gt;
&amp;gt; num(1) = [];&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; irrmean = zeros(4320*2160,1);&lt;br&gt;
&amp;gt; for i = 1:length(num)&lt;br&gt;
&amp;gt;     a = find(gadm == num(i));&lt;br&gt;
&amp;gt;     irrmean(a) = mean(irrarea(a));&lt;br&gt;
&amp;gt;     clear a;&lt;br&gt;
&amp;gt; end&lt;br&gt;
&lt;br&gt;
some hints to improve it:&lt;br&gt;
&lt;br&gt;
for i=1:length(num)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;irrmean(gadm==num(i))=mean(irrarea(a)) % no need for the *slow* find&lt;br&gt;
end</description>
    </item>
    <item>
      <pubDate>Thu, 13 Nov 2008 20:19:03 -0500</pubDate>
      <title>Re: faster for loop</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/239189#610773</link>
      <author>Roger Stafford</author>
      <description>&quot;Michael Lonther&quot; &amp;lt;rsbu@yahoo.com&amp;gt; wrote in message &amp;lt;gfhi7j$str$1@fred.mathworks.com&amp;gt;...&lt;br&gt;
&amp;gt; Hello,&lt;br&gt;
&amp;gt; I would greatly appreciate if there is a non-FOR-loop version of this code.  It is very slow because I think it is very inefficient.  Thank you..&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; % aggregate irr data to GADM values&lt;br&gt;
&amp;gt; fid = fopen('file1.bin','rb');&lt;br&gt;
&amp;gt; irrarea = fread(fid,'float');&lt;br&gt;
&amp;gt; fclose(fid);&lt;br&gt;
&amp;gt; clear fid;&lt;br&gt;
&amp;gt; fid = fopen('file2.bin','rb');&lt;br&gt;
&amp;gt; gadm = fread(fid,'float');&lt;br&gt;
&amp;gt; fclose(fid);&lt;br&gt;
&amp;gt; clear fid;&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; num = unique(sort(gadm));&lt;br&gt;
&amp;gt; num(1) = [];&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; irrmean = zeros(4320*2160,1);&lt;br&gt;
&amp;gt; for i = 1:length(num)&lt;br&gt;
&amp;gt;     a = find(gadm == num(i));&lt;br&gt;
&amp;gt;     irrmean(a) = mean(irrarea(a));&lt;br&gt;
&amp;gt;     clear a;&lt;br&gt;
&amp;gt; end&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;Try the following to see if it is faster than your for-loop method.  It assumes that 'gadm' and 'irrarea' are the same length - is that true?  The resulting 'irrmean' will also be that length.&lt;br&gt;
&lt;br&gt;
&amp;nbsp;[n,n,n] = unique(gadm); % Get mapping onto unique elements of sorted gadm&lt;br&gt;
&amp;nbsp;m = accumarray(n,irrarea)./accumarray(n,1); % Get mean values of corres. irrarea&lt;br&gt;
&amp;nbsp;m(1) = 0; % (Equivalent to the num(1)=[] step)&lt;br&gt;
&amp;nbsp;irrmean = m(n); % Put them into matching irrmean&lt;br&gt;
&lt;br&gt;
Roger Stafford</description>
    </item>
  </channel>
</rss>

