Matlab:随机化和分裂

时间:2012-09-26 21:17:40

标签: matlab matrix split

我在Matlab中有以下数据矩阵,我试图通过将变量传递给matlab函数实际将其拆分为多个段。但在分裂之前我想改组矩阵。我的矩阵的大小是150X4

s.data
5.1000    3.5000    1.4000    0.2000
4.9000    3.0000    1.4000    0.2000
4.7000    3.2000    1.3000    0.2000
4.6000    3.1000    1.5000    0.2000
5.0000    3.6000    1.4000    0.2000
..

s = 

  data: [150x4 double]
labels: [150x1 double]

来自R环境我觉得MatLab很奇怪。最初我认为矩阵中的列有一个像R数据帧中的关系,但我的假设是错误的。

3 个答案:

答案 0 :(得分:5)

或者你可以这样做:

 perm=randperm(numel(data)); % generate a random permutation
 data = reshape(data(perm),size(data)); % apply it to data

答案 1 :(得分:1)

new_data=data(randsample(1:length(data),length(data)),:)

答案 2 :(得分:1)

补充随机播放的答案,为了将您的数据拆分为每个15x2的矩阵,您可以使用mat2cell

data = rand(150,4);        %# generates a random 150x4 matrix
rowdiv = repmat(15,1,10);  %# size of each chunk in rows. Must sum to 150
coldiv = repmat(2,1,2);    %# size of each chunk in cols. Must sum to 4
datacell = mat2cell(data, rowdiv, coldiv)

它将返回一个包含20个矩阵的单元格,可由datacell{x,y}

访问
datacell = 

    [15x2 double]    [15x2 double]
    [15x2 double]    [15x2 double]
    [15x2 double]    [15x2 double]
    [15x2 double]    [15x2 double]
    [15x2 double]    [15x2 double]
    [15x2 double]    [15x2 double]
    [15x2 double]    [15x2 double]
    [15x2 double]    [15x2 double]
    [15x2 double]    [15x2 double]
    [15x2 double]    [15x2 double]

B = repmat(A,M,N)创建一个大型矩阵B,由A的M-by-N平铺组成。我们在这里使用它来生成行和列的精确划分,分别重复元素15十次和2两次。但是,您不需要进行精确划分。您可以设置不同大小的块。不同大小的行:

rowdiv =

    15    15    15    15    15    15    15    15    16    14

将返回:

datacell = 

    [15x4 double]
    [15x4 double]
    [15x4 double]
    [15x4 double]
    [15x4 double]
    [15x4 double]
    [15x4 double]
    [15x4 double]
    [16x4 double]
    [14x4 double]