我想找到非负整数矩阵的列的最小值,不包括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=5
和index=3
,因为排除了0
元素。但是,我想按照任何人的预期得到index=4
。
当然只添加1没有意义,因为它可能发生在任何列上,除了第一列的情况,列的最小值可能高于或低于对角线。
答案 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(:));
现在,您可以将搜索应用到最低