在使用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次,正如预期的那样。
我在这里缺少什么?
答案 0 :(得分:4)
MATLAB使用多种类型的索引。
isnan
返回逻辑索引。也就是说,大小为x
的矩阵或向量,如果该元素为1
则为nan
。输出是逻辑“二进制”变量
find
查找任何不是0
的元素,并为其提供索引。输出是整数。
因此,两个输出都可以用作索引,因此它们将得到相同的结果。话虽这么说,如果你不需要实际的索引(你在上面的例子中没有),不要使用它。在上述情况下,find
是缓慢且多余的。
现在,如果您像上面那样创建1
的数组,它会将其视为索引(如find
),因此它会返回第一个元素的值10次。原因是函数ones
不返回逻辑变量而是返回实际数字(实数)。如果您将ones
替换为true
或将结果首先转换为二进制,则会将其视为逻辑索引。