获取列及其索引的非零最小值
Posted
技术标签:
【中文标题】获取列及其索引的非零最小值【英文标题】:Get the non-zero minimum of a column and its index 【发布时间】:2018-05-22 10:21:35 【问题描述】:我想找到一个非负整数矩阵的列的最小值,不包括 0。我知道矩阵是正方形的,并且在其主对角线的每个元素上只有零(即a(i,i)=0 for all i
)。
我试过这个:
[best_cost,index] = min(star_costs([1:i-1,i+1:nbr],i));
nbr
是我的矩阵的大小。
但是,返回的索引是不包括零的索引,不考虑i
th 元素。例如,我的第一列是:
[0 9 11 5 18 13 14]'
所以代码返回best_cost=5
和index=3
,因为0
元素被排除在外。但是,我想得到index=4
,正如任何人所期望的那样。
当然,仅仅加 1 是没有意义的,因为它可能发生在任何列上,除了第一列的情况,列的最小值可能在对角线之上或之下。
【问题讨论】:
您是否考虑过解决方法,例如将对角线更改为矩阵的最大值,然后搜索最小值? 这里不支持tex,请不要在这里使用 @Irreducible 这主意不错,你说得对,我会测试一下 【参考方案1】:将零替换为inf
,然后使用min
。
A(1:size(A,1)+1:end) = inf; %If the diagonal is to be excluded
%if all zeros are to be excluded including non-diagonal elements, use this instead:
%A(A==0) = inf; %Use tolerance if you have floating point numbers
[best_cost, index] = min(A);
【讨论】:
【参考方案2】:正如评论中所建议的,我会尝试将对角线更改为矩阵的最大值,假设只省略对角线上的零。
%create random matrix
A = magic(4)
%change diagonal to the maximum
A(logical(eye(size(A)))) = max(A(:));
现在您可以应用搜索最小值
【讨论】:
OP 声明0
仅在对角线上,如果有负值,主对角线上的零不是问题,如果只有零......我会发出警告,这取决于 OP以上是关于获取列及其索引的非零最小值的主要内容,如果未能解决你的问题,请参考以下文章