我可以像matlab how to get min value and its index in a matrix这样获得最小值及其索引。
从矩阵A
MinVal
获取最小值ind
(给出行的位置(r),列位于区间([c .. c + x])和索引[MinVal,I]=min(A(r,c:c+x))
ind= c-1+I;
(数量为它的一栏))。我必须做
[MinVal, ind]=min(A(2,3:3+2))
will give me
% MinVal= 1
% ind =5
实施例
B.state=[ 0
0
1
0
1]
然后我
I
所以ind=5
B(5).state==1
因MinVal= 5
ind = 4
无效,我需要转到下一个B(4).state ==1
和B
。在这里,没关系,我可以停止,但如果B(ind).state== 1
,那么我需要移动下一个最小的等等
但问题是我有另一个结构 MinD = A(r,c:c+x);
[MinVal,Ind]=min(MinD);
ind= nbrT+Ind;
MinD2 = sort(MinD(:));
p=2;
while (B(ind).state == 1)
MinVal= MinD2(p);
%need to get the new index
%something like this
ind=find (A == MinVal) ;
p=p+1;
end
我要检查state == 0
然后我必须移动到下一个最小的元素并得到它的索引,依此类推,直到找到第一个空的。
如果我这样尝试
MinD = A(r,c:c+x);
[MinVal,Ind]=min(MinD);
ind= nbrT+Ind;
[MinD2, IndMinD2] = sort(MinD(:));
p=2;
while (B(ind).state == 1)
MinVal=MinD2(p);
Ind=IndMind2(p);
p=p+1;
end
Ind= c-1+Ind;
问题是我可以获得下一个最小值,但是如果MinVal出现多次,我将获得的索引可以是多个值,那么我怎么能得到{{1}}的那个 我也不想使用unique,因为即使我有两个不同的元素具有相同的最小值,它们指的是两个不同的地方,我必须保留两者(如果第一个已满,我可以使用第二个)。 修改后的代码
{{1}}
那我该怎么做呢?
答案 0 :(得分:0)
我认为这应该有效:
MinD2 = MinD(:));
for ii=1:numel(MinD2)
[MinVal,Ind]=min(MinD2);
%do you stuff with the index
%and at the end do this:
MinD2(Ind)=Inf;
end