matlab - | 之间有什么区别?和||在 MATLAB 中?

标签 matlab logical-operators short-circuiting

MATLAB 中的||| 逻辑运算符有什么区别?

最佳答案

我确定您已经阅读了 short-circuiting operators 的文档, 而对于 element-wise operators .

一个重要的区别是元素运算符可以对数组进行运算,而短路运算符仅适用于标量逻辑操作数。

但可能关键的区别在于短路问题。对于短路运算符,表达式从左到右计算,一旦最终结果确定,则不计算剩余项。

例如,考虑

x = a && b

如果 a 的计算结果为 false,那么我们知道 a && b 的计算结果为 false 而不管是什么b 的计算结果为。所以不需要计算b

现在考虑这个表达式:

NeedToMakeExpensiveFunctionCall && ExpensiveFunctionCall

我们想象 ExpensiveFunctionCall 需要很长时间来评估。如果我们可以执行其他一些廉价的测试,允许我们跳过对 ExpensiveFunctionCall 的调用,那么我们就可以避免调用 ExpensiveFunctionCall。

因此,假设 NeedToMakeExpensiveFunctionCall 的计算结果为 false。在那种情况下,因为我们使用了短路运算符,所以 ExpensiveFunctionCall 将不会被调用。

相反,如果我们使用逐元素运算符并编写如下函数:

NeedToMakeExpensiveFunctionCall & ExpensiveFunctionCall

那么永远不会跳过对 ExpensiveFunctionCall 的调用。

事实上MATLAB documentation ,我希望您已经阅读过,其中包含一个很好的例子,很好地说明了这一点:

x = (b ~= 0) && (a/b > 18.5)

在这种情况下,如果 b 为零,我们将无法执行 a/b。因此 b ~= 0 的测试。使用短路运算符意味着我们可以避免在 b 为零时计算 a/b,从而避免出现运行时错误。显然,逐元素逻辑运算符无法避免运行时错误。

有关短路评估的更详细讨论,请参阅 Wikipedia article关于这个问题。

关于matlab - | 之间有什么区别?和||在 MATLAB 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14183385/

相关文章:

matlab - Matlab 中的等高线图 - 需要永远

python - ('a' 中的 'abc' == True)评估为 False

scala - 了解 | scala中的运算符

c++ - C++模板短路逻辑AND(&&)

matlab - 从Matlab中的共生矩阵计算熵

python - 在 python 和 matlab 中填充矩阵的速度

matlab - 模糊颜色图的一部分

python - 在大小为 n*n python 的 ndarray 中接收到大于 x 的元素的所有索引

javascript - 在 ES7 中使用求幂运算符的逆蕴涵逻辑?

c - 短路和可读性