Look for minimum value in array
6 views (last 30 days)
Show older comments
Mateusz Brzezinski
on 2 Sep 2020
Commented: Mateusz Brzezinski
on 2 Sep 2020
Hello,
I have a function like this:
i=1;
Min=ones(1,200);
while i>=200
min_y = min(y(:,i));
pos_y = find(y(:,i)==min_y);
phi0s = x(pos_y ,i);
Min(1,i) = phi0s;
i=i+1;
end
Its job is to find a min value of y and as a results give a corresponding x value.
x and y are arrays with a dimension of n x 200 - let say that I stored results of 200 experiment in those two arrays and now I need to find smallest y value in each column and corresponding x.
Can I improve it somehow or even better run it without a loop? I will be grateful for any tips!
0 Comments
Accepted Answer
Rik
on 2 Sep 2020
Loops aren't slow. You generally only need to remove them if there are native functions that accept array inputs, which happens to be the case here:
%generate random data
n=4;
x=rand(n,200);
y=rand(n,200);
%your corrected code
i=1;
Min=ones(1,200);
while i<=200%why aren't you using a for-loop here?
min_y = min(y(:,i));
pos_y = find(y(:,i)==min_y);
phi0s = x(pos_y ,i);
Min(1,i) = phi0s;
i=i+1;
end
%vectorized
[~,idx]=min(y,[],1);
ind=sub2ind(size(x),idx,1:size(y,2));
Min2=x(ind);
isequal(Min2,Min)
4 Comments
Image Analyst
on 2 Sep 2020
And the 1 can be omitted
Min(i) = phi0s;
And you should probably use a for loop like he suggested, and use "col" or "column" for the column index rather than i which is the imaginary variable sqrt(-1). Or use the vectorized approach. It's more compact and cryptic than a for loop though. So use whatever you're comfortable with. For loops will be fast, particularly if there are only a microscopic 200 iterations.
More Answers (1)
See Also
Categories
Find more on Loops and Conditional Statements in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!