在使用isnan(x)运算符时,我注意到输出是一个数组,无论元素是否为NaN,其0和1都对应。
过滤出NaN元素的逻辑方法是x(find(~isnan(x))),因为find()返回索引。令我惊讶的是,x(~isnan(x))也给出了同样的结果。
检查一下,~isnan(x)只是一个由1和0组成的数组,对于x = rand(10,1)的简单情况,我将all(~isnan(x) == ones(10, 1))设为真。但是当我运行x(ones(10, 1))时,我得到的数组中只有x的第一个元素重复了10次,这与预期不谋而合。
这里我漏掉了什么?
发布于 2017-07-29 05:07:47
MATLAB使用了多种类型的索引。
isnan返回逻辑索引。也就是说,大小为x矩阵或向量,其中如果元素是nan,则它是1。输出是逻辑“二进制”变量
find查找任何不是0的元素并给出它的索引。输出是整数。
因此,这两个输出都可以用作索引,因此它们将得到相同的结果。也就是说,如果您不需要实际的索引(在上面的示例中不需要),就不要使用它。在上面的例子中,find速度很慢,而且是多余的。
现在,如果像上面一样创建1数组,它会将其视为索引(类似于find),因此它会10次返回第一个元素的值。原因是函数ones不返回逻辑变量,而是返回实际数字(实数)。如果您用true替换ones或首先将结果转换为二进制,它将被视为逻辑索引。
https://stackoverflow.com/questions/45382173
复制相似问题