Info
This question is closed. Reopen it to edit or answer.
improve performance of this code
    1 view (last 30 days)
  
       Show older comments
    
suppose to have a matrix called A
3 0 3 3
0 0 4 0
and have this function
while(1)
  if all(A(:,i) == 0)
    i = i + 1;
  else
    i = i + 1
    break;
  end
end
How can I improve the performance of this code?
2 Comments
Answers (3)
  Jan
      
      
 on 10 Nov 2012
        
      Edited: Jan
      
      
 on 10 Nov 2012
  
      I cannot imagine that you can feel the speedup for such a tiny problem.
k = 1;             % Avoid using "i" as variable
while(1)
  if any(A(:, k))  % This saves the creation of the temp logical vector
    k = k + 1;
    break;
  else
    k = k + 1
  end
end
Note that you function will crash, when A contains zeros only. More secure:
index = NaN;
for k = 1:size(A, 2)
  if any(A:, k)
    index = k;
    break;
  end
end
Now index is a NaN, if no column matches the condition.
Shorter:
k = find(any(A, 1), 1);
For large A this must be slower, if a matching column appears early.
1 Comment
  Azzi Abdelmalek
      
      
 on 10 Nov 2012
        
      Edited: Azzi Abdelmalek
      
      
 on 10 Nov 2012
  
      out= min(find(any(A)))
%or
ii= 1;            
while(1)
if any(A(:,ii)) 
break;
else
  ii= ii+1
end
end
0 Comments
This question is closed.
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


