最小值索引,不包括负值
Index of minimum, excluding negative values
我想在数组 L
中找到最小元素的索引,但应忽略负数。有比这更简单的方法吗?
L = xB./a_i;
for j = 1:length(L)
if L(j) < 0
L(j) = Inf;
end
end
[~, indOut] = min(L);
编辑:
您可以使用相同的逻辑在相当简单的一行中执行此操作
[~, indOut] = min( abs(L)./(L>=0) );
这里的逻辑:
abs(L) % Positive (absolute) values of L
./ % Element-wise divide. Note that x/0 = Inf for x>0
L>=0 % Logical array; 0 when L<0
% So: Elements where L<0 are divided by 0, and become Inf.
% Positive value is the one being divided, so never -Inf
% Elements where L>=0 are divided by 1, remain unchanged
% These elements are already positive, so abs(L) == L here.
无论哪种方式,您都不需要循环
L( L < 0 ) = Inf;
[~, indOut] = min( L );
请注意,如果您不想要索引(而只是最小值),您可以这样做
m = min( L( L >= 0 ) );
如果您不想修改 L
,另一种解决方案是先找到最小值,然后在第二步中找到它的索引:
minL = min(L(L>=0));
index = find(L==minL,1);
通常情况下,对浮点数进行相等比较是不好的,但在这种情况下,minL
必须与 L
中的至少一个元素完全相同,因此比较不会失败。
我想在数组 L
中找到最小元素的索引,但应忽略负数。有比这更简单的方法吗?
L = xB./a_i;
for j = 1:length(L)
if L(j) < 0
L(j) = Inf;
end
end
[~, indOut] = min(L);
编辑:
您可以使用相同的逻辑在相当简单的一行中执行此操作
[~, indOut] = min( abs(L)./(L>=0) );
这里的逻辑:
abs(L) % Positive (absolute) values of L
./ % Element-wise divide. Note that x/0 = Inf for x>0
L>=0 % Logical array; 0 when L<0
% So: Elements where L<0 are divided by 0, and become Inf.
% Positive value is the one being divided, so never -Inf
% Elements where L>=0 are divided by 1, remain unchanged
% These elements are already positive, so abs(L) == L here.
无论哪种方式,您都不需要循环
L( L < 0 ) = Inf;
[~, indOut] = min( L );
请注意,如果您不想要索引(而只是最小值),您可以这样做
m = min( L( L >= 0 ) );
如果您不想修改 L
,另一种解决方案是先找到最小值,然后在第二步中找到它的索引:
minL = min(L(L>=0));
index = find(L==minL,1);
通常情况下,对浮点数进行相等比较是不好的,但在这种情况下,minL
必须与 L
中的至少一个元素完全相同,因此比较不会失败。