Look for minimum value in array
조회 수: 1 (최근 30일)
이전 댓글 표시
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
채택된 답변
Rik
2020년 9월 2일
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
Image Analyst
2020년 9월 2일
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.
추가 답변 (1개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!