我正在尝试编写一个代码来查找“距离”矩阵中每行的最小元素的索引,不包括矩阵中的零。
答案 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)不是稀疏)