我在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数据帧中的关系,但我的假设是错误的。
答案 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]