【问题标题】:Indexing in isnanisnan 中的索引
【发布时间】:2018-01-05 00:51:30
【问题描述】:

在使用isnan(x) 运算符时,我注意到输出是一个数组,其中0s 和1s 对应于元素是否为NaN

过滤掉 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 次,正如预期的那样。

我在这里错过了什么?

【问题讨论】:

标签: arrays matlab indexing


【解决方案1】:

MATLAB 使用多种类型的索引。

isnan 返回逻辑索引。也就是说,如果元素为nan,则大小为x 的矩阵或向量为1。输出是逻辑“二进制”变量

find 查找任何不是0 的元素并为您提供其索引。输出是整数。

因此,两个输出都可以用作索引,因此它们的结果相同。话虽如此,如果您不需要实际的索引(在上面的示例中不需要),请不要使用它。在上述情况下,find 速度慢且冗余。

现在,如果您像上面那样创建 1s 的数组,它会将其视为索引(如 find),因此它会返回第一个元素的值 10 次。原因是函数ones 不返回逻辑变量,而是返回实际数字(实数)。如果您将ones 替换为true 或先将结果转换为二进制,则会将其视为逻辑索引。

【讨论】:

    猜你喜欢
    • 2011-01-07
    • 2020-12-27
    • 1970-01-01
    • 2014-07-27
    • 1970-01-01
    • 2011-12-22
    • 1970-01-01
    • 2012-09-16
    • 2016-11-21
    相关资源
    最近更新 更多