是什麼在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) –