我有一个rankingMat
,其中包含权益代码的排名,其中每列代表一个代码,每行代表一个时间点。排名已经以降序的方式执行,即rankingMat
中的1标识该时间段的最高排名(读:行)。股票代码/第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循环的解决方案。我猜这可能是索引。因此,任何提示都受到高度赞赏。
最终结果应如下所示:
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]
答案 0 :(得分:1)
% Prior to R2016b
portfolio = rankingMat <= 3 & ...
bsxfun(@lt, rankingMat, rankingMat(:,4));
% On or after R2016b
portfolio = rankingMat <= 3 & ...
rankingMat < rankingMat(:,4);