首页 文章

MATLAB:用一定的规则将3个矩阵连接成1个新矩阵

提问于
浏览
-2

3个矩阵命名为 ABC . 每个矩阵都有随机 M x N 维 . 但是, N (列号)是相等的 . 从每个矩阵中随机生成1行并逐个放入新矩阵(名为 Fdata ),然后从每个矩阵中随机生成1行,但不能从前一个随机行生成重复生成并放入[717065]再一次......相应地......如果其中一个矩阵是为每一行随机生成一次而不重复,那么该行的其余部分可以再次随机重复,直到来自一个矩阵的最大行 .

如果 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

The final data i wish to get is

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


第二个问题:

Fdata=xlsread('abc.xls,); 原始 Fdata 有5x2矩阵,经过一些代码, Fdata 变成5x5矩阵......然后发生 xlswrite('abc.xls',Fdata,'sheet2'); ..错误...... ??? Index exceeds matrix dimensions ...我该如何解决这个问题?

1 回答

  • 0

    快速工作尝试,它可以优化,但需要更多细节:你做了多少迭代?有破裂的情况吗?你总是会用三个矩阵来喂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
    

相关问题