1
我有一個rankingMat
其中包含權益報價的排名,其中每列表示一個報價器,每一行代表一個時間點。排名已按降序進行,即rankingMat
中的1表示該時間段的最高排名(閱讀:行)。代碼/第4欄代表現金安全。這將在未來的道路上發揮重要作用。具有兩個條件的邏輯索引
現在,我想確定我應該投資哪些股票投資者。存在兩種情況:
- 我只投資於有等級小於或等於3
- 另外行情,我只投資於那些排名高於或等於相比現款代號(股票代號/列4)。
我能得到的是滿足第一條件的結果:
rankingMat = ...
[NaN, NaN, NaN, NaN, NaN, NaN; ...
1, 5, 2, 3, 6, 4; ...
4, 5, 2, 3, 6, 1; ...
4, 1, 2, 5, 6, 3; ...
6, 4, 5, 2, 1, 3; ...
2, 3, 4, 6, 1, 5; ...
3, 6, 4, 1, 2, 5; ...
2, 5, 6, 1, 4, 3];
portfolio = rankingMat <= 3;
結果看起來是這樣的:
portfolio = ...
[0, 0, 0, 0, 0, 0; ...
1, 0, 1, 1, 0, 0; ...
0, 0, 1, 1, 0, 1; ...
0, 1, 1, 0, 0, 1; ...
0, 0, 0, 1, 1, 1; ...
1, 1, 0, 0, 1, 0; ...
1, 0, 0, 1, 1, 0; ...
1, 0, 0, 1, 0, 1]
我的問題是條件2。每一行,我不僅需要比較整數是否小於或等於3,還需要確保它小於該特定行中列4中的整數。我正在尋找避免for-loop的解決方案。我想這是可能的索引。所以,任何提示都非常感謝。
最後的結果應該是這樣的:
portfolio = ...
[0, 0, 0, 0, 0, 0; ...
1, 0, 1, 1, 0, 0; ...
0, 0, 1, 1, 0, 1; ...
0, 1, 1, 0, 0, 1; ...
0, 0, 0, 1, 1, 0; ...
1, 1, 0, 0, 1, 0; ...
0, 0, 0, 1, 0, 0; ...
0, 0, 0, 1, 0, 0]
...這是一個非常巧妙的解決辦法,特別是對2016B版本。它看起來非常直觀。關於bsxfun的一個問題是,這個函數使用了一個循環,也就是說,從執行速度的角度來看,bsxfun的用法相當於使用for-loop來解決這個問題嗎? – Andi
'bsxfun'是一個內置函數。在內部它當然會做一個「循環」,但MathWorks真的盡其所能地儘可能快地完成它。它是多線程的,這意味着它將同時評估多個內核的比較,而MATLAB中的簡單循環只會使用1個內核。 –
在R2016b中,他們最終完全擺脫它,贊成在語言層面實施它。 [這裏](https://blogs.mathworks.com/loren/2016/10/24/matlab-arithmetic-expands-in-r2016b/)稍微有點背景。 –