Arrays isnan中的索引

Arrays isnan中的索引,arrays,matlab,indexing,Arrays,Matlab,Indexing,在使用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)=one(10,1))为true。但是当我运行x(one(10,1))时,我得到了一个数组,其中只有x的第一个元素重复了10次,正如预期的那

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

过滤NaN元素的逻辑方法是
x(find(~isnan(x))
,因为
find()
返回索引。令我惊讶的是,
x(~isnan(x))
也给出了同样的结果

检查时,
~isnan(x)
只是一个1和0的数组,对于
x=rand(10,1)
的简单情况,我得到
all(~isnan(x)=one(10,1))
为true。但是当我运行
x(one(10,1))
时,我得到了一个数组,其中只有
x
的第一个元素重复了10次,正如预期的那样


我这里缺少什么?

MATLAB使用多种类型的索引

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

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

因此,两个输出都可以用作索引,因此它们将获得相同的结果。也就是说,如果您不需要实际的索引(在上面的示例中不需要),就不要使用它<代码>查找在上述情况下速度慢且冗余


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

再看看,
x(true(10,1))
将返回
x
。但是,请注意,根据数据类型,MATLAB的行为可能会有所不同。