あなたが達成しようとしていることは、投稿から完全には明らかではありません。これは、さまざまなオプションを使用した推測に基づくテイクです。
最初の 2 つの「テーブル」には、株式と日数のシンボルが格納されます (ランキングには関係ありません)。あなたの 3 番目と 4 番目は、ある方法で配置されたスコアstock x day
です。株式は縦、日は横、株式は の値でシンボル化されていると仮定しましょう[1:10]
。
N = 10; % num of stocks
M = 10; % num of days
T3 = rand(N,M); % table 3 stocks x days
T4 = rand(N,M); % table 4 stocks x days
スコア テーブルを昇順および降順で並べ替えます (1 日ごと、つまり列ごとに上位および下位のスコアを取得するため):
[Sl,L] = sort(T3, 'descend');
[Ss,S] = sort(T4, 'ascend');
最大と最小の 3 つを保持します。
largest = L(1:3,:); % bucket of 3 largest per day
smallest = S(1:3,:); % bucket of 3 smallest per day
両方のものが必要な場合 (0 は nan):
% Inter-section of both buckets
indexI = zeros(3,M);
for i=1:M
z = largest(ismember(largest(:,i),smallest(:,i)));
if ~isempty(z)
indexI(1:length(z),i) = z;
end
end
どちらかが必要な場合 (0 は nan):
% Union of both buckets
indexU = zeros(6,M);
for i=1:M
z = unique([largest(:,i),smallest(:,i)]);
indexU(1:length(z),i) = z;
end
maximum_of_3 と least_of_4 のセットからのスコア/株式のランキングが必要な場合:
scoreAll = [Sl(1:3,:); Ss(1:3,:)];
indexAll = [largest;smallest];
[~,indexSort] = sort(scoreAll,'descend');
for i=1:M
indexBest(:,i) = indexAll(indexSort(1:3,i),i);
end
アップデート
最終スコアの加重ランキングを取得するには、加重ベクトル (1 x スコア) を定義し、以下の 2 つのオプションのいずれかを使用してから、 のscoreAllW
代わりに並べ替えscoreAll
ます。
w = [0.3 ;0.3; 0.3; 0.7; 0.7; 0.7];
scoreAllW = scoreAll.*repmat(w,1,10); % Option 1
scoreAllW = bsxfun(@times, scoreAll, w); % Option 2