如何在MATLAB中得到每行矩阵的最小元素的索引

时间:2013-07-16 14:58:09

标签: matlab matrix

我正在尝试编写一个代码来查找“距离”矩阵中每行的最小元素的索引,不包括矩阵中的零。

2 个答案:

答案 0 :(得分:1)

使用Dan的提示:

myArray(myArray==0)=Inf;
[m mi] = min(myArray, [], 2);

mi的值将是每行中最小元素的索引。请注意,最小值是沿着第二维度(根据dspyz的建议)。

答案 1 :(得分:1)

如果距离矩阵是(大)稀疏矩阵,则这个问题有点不重要。最好的方法可能是从每行中的每个非零元素中减去(最大值* 2)。这看起来很丑陋和讨厌,但我无法想到任何其他有效的方法来解决它。

sub = max(0, max(myArray,[],2) * 2);
[i,j,v] = find(myArray);
v -= sub;
myArray = sparse(i,j,v);
[junk mi] = min(myArray,[],2);

编辑:如果一行中的元素具有非常不同的大小,则仍存在精度问题。如果是这种情况,您可以改为采用负反转。这样,您就不会将矩阵中不同元素的大小(或任何常数)组合起来

posOnly = ~any(myArray < 0, 2);
[i,j,v] = find(myArray);
inds = posOnly(i);
v(inds) = -1 ./ v(inds);
myArray = sparse(i,j,v);
[junk mi] = min(myArray,[],2);

(注意使用~any(myArray&lt; 0)而不是all(myArray&gt; = 0),因为(myArray&lt; 0)至少和myArray一样稀疏,而(myArray&gt; = 0)不是稀疏)