【问题标题】:Split a vector into two vectors randomly in MATLAB在MATLAB中将一个向量随机分成两个向量
【发布时间】:2016-12-23 17:13:05
【问题描述】:

我有一个包含 36 个值的向量,我想将它随机分成两个向量。 (第一个向量有 25 个值,第二个有 11 个值)。

我已经编写了这段代码(使用 MATLAB),但是当我在原始向量中有重复值时,由于这个命令,我不会在第二个向量中获得 11 个样本

Second_vec = setdiff(orignal_Vec,First_vec);



clear;
load('U1_Acc_TimeD_FDay.mat' ); 

orignal_Vec=(Acc_TD_Feat_Vec (:,1)); 

Total_Samples = size(orignal_Vec,1);

Selected_Samples = 25; 

assert(Selected_Samples<=Total_Samples); 

rand_rows = randperm(Total_Samples, Selected_Samples);

First_vec = orignal_Vec(rand_rows,:);  % Select the random rows from the original Vector

Second_vec = setdiff(orignal_Vec,First_vec);

【问题讨论】:

  • 使用randperm 为您的数据生成索引和索引。
  • 亲爱的 Excaza,如果您看到我上面的代码!我已经使用它来创建第一个向量,但我希望原始向量中的剩余值位于第二个向量中。
  • 你为什么要删除你的代码?您应该回滚该编辑并将代码示例保留在那里,以便人们可以看到您做了什么以及它对您不起作用,以便与接受的答案进行比较。
  • 哦,对不起,我以为我会迷惑别人,非常感谢你让我知道,我会附上它:)。顺便说一句,我想知道您是否可以帮助我解决新问题stackoverflow.com/questions/41295449/…,因为我已经在此处附上了完整的代码以避免重复。亲切的问候。

标签: matlab


【解决方案1】:

不是使用 randperm 生成 25 个随机整数,而是使用语法 randperm(36) 生成 36 个随机整数。然后你可以使用这个随机整数向量中的前 25 个元素来索引原始向量以获得你的第一个向量,然后将其余的用于第二个向量。您修改后的代码如下。

clear;
load('U1_Acc_TimeD_FDay.mat' ); 

orignal_Vec=(Acc_TD_Feat_Vec (:,1)); 

Total_Samples = size(orignal_Vec,1);

Selected_Samples = 25; 

assert(Selected_Samples<=Total_Samples); 

rand_rows = randperm(Total_Samples);

First_vec = orignal_Vec(rand_rows(1:Selected_Samples));  % Select the random rows from the original Vector

Second_vec = orignal_Vec(rand_rows(Selected_Samples+1:end));

【讨论】:

  • 亲爱的纳文,非常感谢。我猜你误解了我的问题。我已经有了向量(这是 orignal_Vec)。所以,我不想生成随机整数值!因为我已经将我的值存储在 orignal_Vec 中。我想做的就是将原始向量随机分成两个向量。第一个向量有 25 个值,第二个向量有 11 个值!再次感谢您的回答
  • @Neamah 这就是他的代码正在做的事情。尝试运行它。它会像您一样加载数据,然后使用 randperm 有效地打乱您的 original_Vec 数组中的值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-28
  • 2021-10-30
  • 2017-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多