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

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 是我的矩阵的大小。

但是,返回的索引是不包括零的索引,不考虑ith 元素。例如,我的第一列是:

[0 9 11 5 18 13 14]'

所以代码返回best_cost=5index=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

以上是关于获取列及其索引的非零最小值的主要内容,如果未能解决你的问题,请参考以下文章

R - 创建几列非零最小值的新列

在索引 0 为 0 的数组中查找非零最小值 C++

确定数组中 N 个非零最小值的索引

如何在 VBA 中找到数组的最小值?

使用 CUDA Thrust 确定每个矩阵列中的最小元素及其位置

如何获取列中多个最小值的索引?