为什么任何('')返回逻辑0而所有('')返回逻辑1?

Ray*_*hen 4 matlab

我刚发现语句any('')返回逻辑0,而语句all('')返回逻辑1.

如果函数any不认为空字符串('')为非零,则函数all应该执行相同的操作,但是从结果来看,函数all似乎认为空字符串('')为非零.

顺便说一下,类似的事情发生在any(NaN)返回逻辑0而all(NaN)返回逻辑1的情况下.

这是一个MATLAB错误吗?

这是我正在使用的MATLAB的版本信息.
MATLAB版本:9.1.0.441655(R2016b)
MATLAB许可证编号:DEMO

rah*_*ma1 5

根据任何文件的
定义:

any(x)...确定是否有任何元素是非零数字或逻辑1(真)

实际上,它any是逻辑OR运算符的自然扩展.

如果A是空的0乘0矩阵,则any(A)返回逻辑0(假).

所有的定义:

all(x)...确定元素是否全为非零或逻辑1(真)

在实践中,all是逻辑AND运算符的自然扩展.

如果A是空的0乘0矩阵,则all(A)返回逻辑1(真).

我们可以实现这两个功能:

function out = Any(V)
    out = false;
    for k = 1:numel(V)
        out = out || (~isnan(V(k)) && V(k) ~= 0);
    end
end

function out = All(V)
    out = true;
    for k = 1:numel(V)
        out = out && (V(k) ~= 0);
    end
end
Run Code Online (Sandbox Code Playgroud)

说明:

- any我们假设所有元素都不是非零[所以都是零]我们想证明假设是错误的,所以我们提供的初始值为false.
-因为any是逻辑OR运算符的自然延伸,我们使用||
-因为我们要检查nonzero我们使用数字V(k) ~= 0
-因为我们应该检查非零numbersNaNNot a Number我们使用~isnan(V(k)).

- all我们假设所有元素都是非零[所以都是1]我们想要证明假设是错误的,所以我们提供了一个初始值true
-Because all是我们使用的逻辑AND运算符的自然扩展&&
- 因为我们应该检查对于非零我们使用V(k) ~= 0
- 因为定义all 并不强制非零元素是我们不使用的数字~isnan(V(k))