获取列的非零最小值及其索引

时间:2017-12-08 07:41:46

标签: matlab matrix minimum

我想找到非负整数矩阵的列的最小值,不包括0.我知道矩阵是正方形,并且在其主对角线的每个元素上只有零(即a(i,i)=0 for all i) 。

我试过这个:

[best_cost,index] = min(star_costs([1:i-1,i+1:nbr],i));

nbr是我矩阵的大小。

但是,返回的索引是排除零的索引,而不考虑i元素。例如,我的第一列是:

[0 9 11 5 18 13 14]'

因此代码返回best_cost=5index=3,因为排除了0元素。但是,我想按照任何人的预期得到index=4

当然只添加1没有意义,因为它可能发生在任何列上,除了第一列的情况,列的最小值可能高于或低于对角线。

2 个答案:

答案 0 :(得分:3)

将{0}替换为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); 

答案 1 :(得分:1)

正如评论中所建议的,我会尝试将对角线更改为矩阵的最大值,假设只省略对角线上的零。

%create random matrix
A = magic(4)
%change diagonal to the maximum
A(logical(eye(size(A)))) = max(A(:));

现在,您可以将搜索应用到最低