數據集採用以下格式:輸入樣本矩陣X和輸出類向量Y,使得X中的每一行都是一個樣本,每列都對應一個要素。 Y中的每個索引對應於X中對應樣本的相應輸出類.X可以包含實數,而Y包含正整數。在MATLAB中按類交錯數據集的高效技術
我的目標是根據班級排列數據集。例如
X = Y =
1 8 3 2
4 2 6 1
7 8 9 2
2 3 4 3
1 4 6 1
應當責令和交錯的
X = Y =
4 2 6 1
1 8 3 2
2 3 4 3
1 4 6 1
7 8 9 2
我已經嘗試的代碼似乎需要很長的時間,因爲它是基於串行執行運行。它是以下內容。
X = csvread('X.csv');
Y = csvread('Y.csv');
n = size(unique(Y),1);
m = size(X,1);
for i = 1:n
Dataset(i).X = X(Y==i,:);
Dataset(i).Y = Y(Y==i);
end
[num, ~] = hist(Y,n);
maxfreq = max(num);
NewX = [];
NewY = [];
for j = 1:maxfreq
for i = 1:n
if(j <= size(Dataset(i).X,1))
NewX = [NewX; Dataset(i).X(j,:)];
NewY = [NewY; i];
end
end
end
X = NewX;
Y = NewY;
clear NewX;
clear NewY;
csvwrite('OrderedX.csv', X);
csvwrite('OrderedY.csv', Y);
是可以並行上面的代碼?
那麼存在一些最大整數Y_max?並且是1s,2s,3s等的數量......最多隻有1個? (例如,你不可能有五個1,但只有三個2?) 或者從你的代碼看起來,可能有更多的一個數字比另一個更多。 –
是@MatthewGunn,可以有更多的一個數字比另一個。例如,一個隨機設置的5個1,3個2和6個3可以排列爲'[1 2 3 1 2 3 1 2 3 1 3 1 3 3]''。 –