【问题标题】:Matlab: Randomize and SplitMatlab:随机化和拆分
【发布时间】:2012-09-26 21:17:40
【问题描述】:

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

【问题讨论】:

  • randomize 是什么意思?得到一堆随机值?将行按随机顺序排列?
  • 对不起,我说的是洗牌场景……让我在问题中更新一下
  • 你也想知道如何分割你的矩阵吗?
  • 是的,那太棒了,我真正想做的是给这个 s.data 打乱它并分成 10 个块

标签: matlab matrix split


【解决方案1】:

或者你可以这样做:

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

【讨论】:

  • 你能解释一下这里有什么数据吗?
  • @Null-Hypothesis data 将等同于上面示例中的 s.data
【解决方案2】:
new_data=data(randsample(1:length(data),length(data)),:)

【讨论】:

  • 如果你能解释一下就好了。
  • 我的答案与@Oli 的不同。他的答案保留了矩阵的元素并随机化它们在新矩阵中的任何位置,而我的答案是打乱矩阵,保持行完整。
【解决方案3】:

补充 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,由A 的副本的M×N 平铺组成。我们在这里使用它来生成行和列的精确划分,分别重复元素15 十次和2 两次。但是,您不需要进行精确的划分。您可以设置不同大小的块。不同大小的行:

rowdiv =

    15    15    15    15    15    15    15    15    16    14

将返回:

数据单元 = [15x4 双] [15x4 双] [15x4 双] [15x4 双] [15x4 双] [15x4 双] [15x4 双] [15x4 双] [16x4 双] [14x4 双]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-13
    • 2018-08-13
    • 1970-01-01
    • 2016-12-01
    • 1970-01-01
    • 2017-03-10
    相关资源
    最近更新 更多