matlab矩阵中下一个最小元素的索引

时间:2016-03-14 21:38:45

标签: matlab matrix

我可以像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==1MinVal= 5 ind = 4无效,我需要转到下一个B(4).state ==1B。在这里,没关系,我可以停止,但如果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}}

那我该怎么做呢?

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