Matlab:随机化和拆分
我在Matlab中有以下数据矩阵,我试图通过将变量传递给Matlab函数,将其分成多个部分。但是在分割之前,我想洗牌矩阵。我的矩阵大小为Matlab:随机化和拆分,matlab,matrix,split,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
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数据帧中的列有类似的关系,但我的假设是错误的 或者您可以执行以下操作:
new_data=data(randsample(1:length(data),length(data)),:)
perm=randperm(numel(data)); % generate a random permutation
data = reshape(data(perm),size(data)); % apply it to data
作为对随机排列答案的补充,为了将数据拆分为每个矩阵的
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]
将返回:
datacell =
[15x4 double]
[15x4 double]
[15x4 double]
[15x4 double]
[15x4 double]
[15x4 double]
[15x4 double]
[15x4 double]
[16x4 double]
[14x4 double]
数据单元=
[15x4双精度]
[15x4双精度]
[15x4双精度]
[15x4双精度]
[15x4双精度]
[15x4双精度]
[15x4双精度]
[15x4双精度]
[16x4双精度]
[14x4双精度]
你所说的随机化是什么意思?得到一堆随机值?按随机顺序排列?对不起,这是一个类似洗牌的场景。。让我在问题中更新一下,你想知道如何分割你的矩阵吗?是的,那太棒了,我真正想做的是给这个s。数据洗牌并分割成10块。如果你能解释一下,那就太好了。我的答案与@Oli的不同。他的答案保留了矩阵的元素,并将它们在新矩阵中的任意位置随机化,而我的答案洗牌了矩阵,保持了行的完整性。你能解释一下这里的数据吗?@Null-hyporation
data
将等同于s.data
,在你上面的例子中。
datacell =
[15x4 double]
[15x4 double]
[15x4 double]
[15x4 double]
[15x4 double]
[15x4 double]
[15x4 double]
[15x4 double]
[16x4 double]
[14x4 double]