如何找到三个非零的最小数字。
我尝试引入一个非常小的数字eps = 1e-6
(我的数字要么为零,要么明显大于 eps),并在 min(x,eps)、min(y,eps) 等之间进行测试。我什么也没得到。有没有办法用函数做到这一点?
如果数字都存储在向量中x
,您可以执行以下操作:
x = [1 0 2 0 3 0 4];
y = min(x(x>0));
这是基于你的陈述
数字要么为零,要么明显大于
eps
如果您的意思是幅度更大并且您想接受非零负值,您可以使用:
x = [1 0 -2 0 3 0 4];
y = min(x(x~=0));
请注意,当存在负数时,这将返回最大的负数,而不是具有最小非零幅度的数字。要获得具有最小非零幅度的数字,您可以使用:
x = [1 0 -2 0 3 0 4];
xnonzero = x(x~=0);
[~,idx] = min(abs(xnonzero));
y = xnonzero(idx);
看起来不是很优雅。可能有更直接的方法。
numbers = [1 3 4 -2 1 0];
answer = min(numbers(numbers>0));
answer == 1