对于涉及整数的运算,是一个逻辑值的向量,它等于一个整数向量,取值是0和1吗?
如果我对逻辑对象而不是整数对象进行计算或应用函数,我是否会遇到意想不到的后果?
答案 0 :(得分:10)
这实际上取决于案例,但与编程一样:变量的显式转换优于隐式!
这是一个简单的例子,你可以看到差异:
x = [0 1 0 1 0] %// 0 1 0 1 0
y = logical(x) %// 0 1 0 1 0
y(y) = 5 %// 0 1 0 1 0
x(y) = 5 %// 0 5 0 5 0
y(x) = 5 %// error
x(x) = 5 %// error
因此,当指向索引左侧的索引变量时,确定输出的类型。 因此,只要您能确保输出总是加倍,就不会遇到问题。
看看这个更复杂的例子:
z = double([0 0 0 0 0])
z(y) = x(y) + y(y)
第一个summand是 double ,第二个是逻辑。但是作为它们是算术运算的一部分,两个加法都被处理为 double 。由于z
也是 double ,结果是双
z =
0 2 0 2 0
现在考虑以下事项:
z = logical([0 0 0 0 0])
z(y) = x(y) + y(y)
第一个加数是 double ,第二个是逻辑。再次,他们被视为双。但z
是逻辑,因此实际 double 结果将转换为逻辑。
z =
0 1 0 1 0
答案 1 :(得分:1)
通常,但并非总是如此。
最大的区别是对islogical
的调用对于任何数字输入都将返回false - 这可以在您将索引数组作为输入传递的函数中完成。
索引其他数组将正常工作(请参阅thewaywewalk'答案),但类型检查可能会导致问题。