是什么在MATLAB中|
和||
逻辑运算符之间的区别?|有什么区别?和||在MATLAB中?
回答
||
用于标量输入
|
取阵列输入中的if/while语句
从source: -
始终使用& &和||需要短路时的操作人员。 使用的elementwise运营商(&和|)用于短路可以 产生意想不到的结果。
这不完全准确。 –
逻辑运算符
MATLAB提供三种类型的逻辑operators
和functions
:
|
是逐元素 - 在相应的逻辑阵列的元素进行操作。
实施例: 矢量输入A
和B
A = [0 1 1 0 1]; B = [1 1 0 0 1];
A | B = 11101
||
是短路 - 标量操作,逻辑表达式实施例:
||
:返回逻辑1(真),如果任一输入,或两者,求值为真,并且逻辑0(假)如果他们不。操作数:含有标量值逻辑表达式。
A
||B
(如果A为假乙只计算)A = 1;
B = 0;
C =(A || (B = 1));
B
是0
该表达式和C is 1
之后。其他是,逐位 - 在对应的整数值或阵列的位进行操作。
reference link
|
表示OR
作为logical operator。||
也是一个逻辑运算符,称为short-circuit OR
短路运算符的最大优点是只有在满足某些条件时才可以使用它们来评估表达式。例如,只有当函数文件驻留在当前的MATLAB路径上时才想执行函数。短路保持距离产生错误下面的代码文件时,myfun.m,无法找到:
comp = (exist('myfun.m') == 2) && (myfun(x) >= y)
同样,这句话避免试图除以零:
x = (b ~= 0) && (a/b > 18.5)
你可以还使用&&
和||
运营商在if
和while
语句来把他们的短路行为的优势:
if (nargin >= 3) && (ischar(varargin{3}))
我确定您已阅读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)
在这种情况下,我们不能执行a/b
如果b
为零。因此测试b ~= 0
。使用短路运算符意味着当b
为零时我们避免计算a/b
,因此避免出现运行时错误。显然,基于元素的逻辑运算符将无法避免运行时错误。
关于短路评估的更多讨论,请参考Wikipedia article的主题。
+1:值得注意的是,'|'可以在数组上操作,而'||'只能在标量上操作。此外,[Loren Shure](http://blogs.mathworks.com/loren/)指出[这里](http://stackoverflow.com/a/1393606/1336150)'''也可能短路( !!),但只在'if' /'while'语句中。 –
短路||
表示仅在必要时才会评估参数。 在我们的示例expr1 || expr2
中,如果expr1
的计算结果为TRUE
,则不需要评估第二个操作数 - 结果将始终为TRUE
。如果你有一个长链短路操作员A || B || C || D
,你的第一个评估为真,那么其他人将不会被评估。
如果您将元素逻辑|
替换为A | B | C | D
,则将评估所有元素,而不管先前的操作数如何。
- 1. *和。*在matlab中有什么区别?
- 2. MATLAB中的{}和[]有什么区别?
- 3. MATLAB中&和&&有什么区别?
- 4. Matlab中ubit16和uint16有什么区别?
- 5. matlab中'caller'和'base'工作区有什么区别?
- 6. 有什么区别`和$(Bash中有什么区别?
- 7. 在matlab中使用audioplayer时double和int16有什么区别
- 8. rsenc和comm.RSDecoder在Matlab中有什么区别
- 9. 矩阵和图像在Matlab中有什么区别?
- 10. 在Prolog中==和= =有什么区别?
- 11. =和在mysql中有什么区别?
- 12. `|。有什么区别? `和`|| `在java中?
- 13. &和|有什么区别?在Linux中?
- 14. 〜/和〜在linux中有什么区别?
- 15. < - 和=在data.frame中有什么区别?
- 16. 在PHP中!==和!=有什么区别?
- 17. &&和||有什么区别?在JavaScript中?
- 18. 在Ember.js中,[]和Ember.A([])有什么区别?
- 19. 在JavaScript中,'\'和'\ n'有什么区别?
- 20. !=和=!有什么区别!在Java中?
- 21. MATLAB中的“addOptional”和“addParameter”函数有什么区别?
- 22. MatLab中的[A,B]和[A; B]有什么区别?
- 23. MATLAB中的plotconfusion和Confusionmat函数有什么区别?
- 24. MATLAB中的.m和.mat文件有什么区别
- 25. MATLAB中的5和[5]有什么区别?
- 26. Matlab中单元和矩阵有什么区别?
- 27. MATLAB中的脚本和函数有什么区别?
- 28. MATLAB中的向量和矩阵有什么区别?
- 29. 有什么区别? :和||
- 30. &&和||有什么区别?
查看文档:http://www.mathworks.co.uk/help/matlab/matlab_prog/operators.html#f0-38948。 –
相关问题:[在MATLAB中&和&&有什么区别?](http://stackoverflow.com/questions/1379415/whats-the-difference-between-and-in-matlab) –