MATLAB: объединить 3 матрицы в 1 новую матрицу с определенным правилом - PullRequest
0 голосов
/ 06 июля 2011

3 матрицы названы A, B и C.Каждая матрица имеет случайное M x N измерение.Тем не менее, N (номер столбца) равны.Произвольно сгенерируйте 1 строку из каждой матрицы и поместите в новую матрицу (названную Fdata) одну за другой, а затем снова случайным образом сгенерируйте 1 строку из каждой матрицы, но не можете повторить предыдущее случайное генерирование строки ипоместите в Fdata снова по одному .. сделайте это соответственно ... если одна из матриц генерируется случайным образом один раз для каждой строки без повторения, то остальная часть строки может быть случайным образом повторена снова до тех пор, пока не будет достигнуто максимальное число строк от одного изматрица.

Если A - это матрица 5x5, B - это матрица 2x5, а C - это матрица 3x5, Fdata будет матрицей 15x5

пример:

A = 
6 6 4 7 8
4 7 1 6 9
3 5 8 0 1
6 5 8 1 2
9 4 2 0 1

B = 
4 7 2 8 5
5 6 0 1 2

C = 
1 6 4 5 1
8 6 7 1 3
3 0 4 5 8

Окончательные данные, которые я хочу получить:

Fdata = 
4 7 1 6 9 %randomly from matrix A
5 6 0 1 2 %randomly from matrix B
1 6 4 5 1 %randomly from matrix c
6 6 4 7 8 %randomly from matrix A (but not repeated from previous randomly generated row)
4 7 2 8 5 %randomly from matrix B (but not repeated from previous randomly generated row)
3 0 4 5 8 %randomly from matrix C (but not repeated from previous randomly generated row)
3 5 8 0 1 %randomly from matrix A (but not repeated from previous randomly generated row)
4 7 2 8 5 %randomly from matrix B, repeated row because the row of matrix B is fully randomly generated
8 6 7 1 3 %randomly from matrix C (but not repeated from previous randomly generated row)
9 4 2 0 1 %randomly from matrix A (but not repeated from previous randomly generated row)
....

какой код я должен написать, чтобы получить Fdata?


2-й вопрос:

скажем, Fdata=xlsread('abc.xls,); оригинал Fdata имеет матрицу 5x2, после некоторых кодов Fdata становится матрицей 5x5 .. затем xlswrite('abc.xls',Fdata,'sheet2'); .. происходит ошибка ... ???Index exceeds matrix dimensions ... как я могу решить эту проблему?

1 Ответ

0 голосов
/ 06 июля 2011

Быстрая рабочая попытка, ее можно оптимизировать, но тогда потребуется еще несколько деталей: сколько итераций вы выполняете? есть ли условия для поломки? Будете ли вы всегда использовать три матрицы для подачи Fdata?

Вот рабочий пример кода:

function Fdata=buildFdata
A=rand(5,5);
B=rand(2,5);
C=rand(3,5);
selectedA=[];
selectedB=[];
selectedC=[];
n=max([size(A,1) size(B,1) size(C,1)]);
Fdata=zeros(3*n,5);
for i=1:3:3*n-2
    [Fdata,A,selectedA]=randomfeed(Fdata,A,selectedA,i);
    [Fdata,B,selectedB]=randomfeed(Fdata,B,selectedB,i+1);
    [Fdata,C,selectedC]=randomfeed(Fdata,C,selectedC,i+2);
end
end

function [Fdata,Mat,selectedMat]=randomfeed(Fdata,Mat,selectedMat,i)
if(~isempty(Mat))
    index=randline(size(Mat,1));
    Fdata(i,:)=Mat(index,:);
    selectedMat(end+1,:)=Mat(index,:);
    Mat(index,:)=[];
else
    index=randline(size(selectedMat,1));
    Fdata(i,:)=selectedMat(index,:);
end    
end

function n=randline(nlines)
if(nlines==1)
    n=1;
else
    n=randi(nlines-1)+1;
end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...