【发布时间】: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= 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
问题是我可以得到下一个最小值,但是如果 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; `