【发布时间】:2015-09-17 05:52:02
【问题描述】:
对于涉及整数的运算,逻辑值向量是否等同于取适当值 0 和 1 的整数向量?
如果我对逻辑对象而不是整数对象进行计算或将函数应用于逻辑对象,我会遇到意想不到的后果吗?
【问题讨论】:
标签: matlab
对于涉及整数的运算,逻辑值向量是否等同于取适当值 0 和 1 的整数向量?
如果我对逻辑对象而不是整数对象进行计算或将函数应用于逻辑对象,我会遇到意想不到的后果吗?
【问题讨论】:
标签: matlab
这确实取决于情况,但在编程中一如既往:变量的显式转换比隐式转换好!
这是一个简单的示例,您可以从中看出区别:
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)
第一个加数是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是logical,所以实际上double的结果被转换成logical。
z =
0 1 0 1 0
【讨论】:
通常,但并非总是如此。
最大的区别在于,对于任何数字输入,对islogical 的调用都将返回 false —— 这可以在您将索引数组作为输入传递的函数中完成。
索引其他数组可以正常工作(请参阅 thewaywewalk 的回答),但类型检查可能会给您带来问题。
【讨论】: