0

我在 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 数据框中的关系有相似之处,但我的假设是错误的。

4

3 回答 3

5

或者你可以这样做:

 perm=randperm(numel(data)); % generate a random permutation
 data = reshape(data(perm),size(data)); % apply it to data
于 2012-09-26T21:35:23.170 回答
1
new_data=data(randsample(1:length(data),length(data)),:)
于 2012-09-26T21:30:38.493 回答
1

补充 shuffle 答案,为了将您的数据拆分为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}

数据单元 =

    [15x2 双] [15x2 双]
    [15x2 双] [15x2 双]
    [15x2 双] [15x2 双]
    [15x2 双] [15x2 双]
    [15x2 双] [15x2 双]
    [15x2 双] [15x2 双]
    [15x2 双] [15x2 双]
    [15x2 双] [15x2 双]
    [15x2 双] [15x2 双]
    [15x2 双] [15x2 双]

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

rowdiv =

    15    15    15    15    15    15    15    15    16    14

将返回:

数据单元 =

    [15x4 双]
    [15x4 双]
    [15x4 双]
    [15x4 双]
    [15x4 双]
    [15x4 双]
    [15x4 双]
    [15x4 双]
    [16x4 双]
    [14x4 双]
于 2012-09-26T22:26:31.467 回答