【问题标题】:matlab the index of the next smallest element in a matrixmatlab 矩阵中下一个最小元素的索引
【发布时间】:2016-03-14 21:38:44
【问题描述】:

我可以像这里 matlab how to get min value and its index in a matrix 一样获得最小值及其索引。

从矩阵 A

A=[1 3 6 2 0 4
   6 8 9 5 1 3
   7 2 7 8 9 2]

获取最小值MinVal(其中行给定(r),列在区间([c..c+x])和索引ind(它的列数) )。我必须这样做

[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= 5ind = 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

问题是我可以得到下一个最小值,但是如果 MinVal 出现不止一次,我将得到的索引可能不止一个值,那么我怎样才能得到 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;

那我该怎么做呢?

【问题讨论】:

  • state 什么时候从 1 切换到 0?
  • 我的代码中有其他地方。所以在这里,我已经有了 0(空)或 1(满)的状态,我想选择一个最小且空的状态。
  • 所以在这里,如果你有多个零状态,你就有多个最小值。您想选择阵列中较早出现的那个吗?
  • 如果您必须反复检查每个下一个最小值,我认为使用相关的排序索引执行 pre-sort 是可行的方法。然后你只需线性地遍历排序的向量。
  • 我确实喜欢这个 `MinD = A(r,c:c+x); [MinVal,Ind]=min(MinD);工业= nbrT+工业; [MinD2, IndMinD2] = 排序(MinD(:)); p=2;而 (B(ind).state == 1) MinVal=MinD2(p); Ind=IndMind2(p); p=p+1;结束 Ind= c-1+Ind; `

标签: matlab matrix


【解决方案1】:

我认为这应该可行:

           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

【讨论】:

  • 我不认为这会给我想要的东西。我试图用一个例子更好地解释。请参阅我的问题的编辑。
猜你喜欢
  • 2014-09-22
  • 1970-01-01
  • 2015-01-06
  • 2023-04-09
  • 1970-01-01
  • 2012-10-16
  • 2017-02-10
  • 2012-12-10
  • 1970-01-01
相关资源
最近更新 更多