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的行为可能会有所不同。