在isnan中索引

时间:2017-07-28 20:48:45

标签: arrays matlab indexing

在使用Promise .resolve({}) .then(obj => { return pack(obj, genVal("a"), "a", genVal("b"), "b"); }) .then(obj => { return pack(obj, genVal("c"), "c"); }) .then(console.log); /* { partA: "some value from part A", partB: "some value from part B", partC: "some value from part C" } */ 运算符时,我注意到输出是一个数组isnan(x)0 s,对应元素是否为1

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

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

我在这里缺少什么?

1 个答案:

答案 0 :(得分:4)

MATLAB使用多种类型的索引。

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

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

因此,两个输出都可以用作索引,因此它们将得到相同的结果。话虽这么说,如果你不需要实际的索引(你在上面的例子中没有),不要使用它。在上述情况下,find是缓慢且多余的。

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