【问题标题】:Permuation in a loop on MatlabMatlab循环中的排列
【发布时间】:2020-12-03 06:18:47
【问题描述】:

我正在尝试编写一个将我的数据 (35x2) 重塑 10000 次的代码。这是我的代码

N = 35;
reshape(table1(randperm(2*N)),N,2);

在每次迭代中(将有 10000 次),需要随机生成的组之间的平均差。但是,我想不出办法。

for i = 1:10000
   permutatedvers(i) = reshape(i)(table1(randperm(2*N)),N,2);
end

所以我尝试了这些类型的代码,但我遇到了错误。如何循环实现?

【问题讨论】:

  • 您遇到了什么错误?你为什么要reshape(i)?您生成哪些组?
  • @CrisLuengo "()-索引必须出现在索引表达式的最后。'这是错误。我做了 reshape(i),因为我想保存所有重新整形的数据,但这不是解决方案......

标签: matlab statistics permutation


【解决方案1】:

好的,所以我找到了一个解决方案并想与您分享,以防将来有人需要它。

我决定不使用 for 循环,而是使用 while 循环。

N=length(table1)
ii=1;
while (ii<10001)

t1perm= reshape(table1(randperm(2*N)),N,2);
t1permA=t1perm(:,1); %groupA
t1permB=t1perm(:,2); %groupB
meandif(ii)= mean(t1permA)-mean(t1permB);  %meandif gives us a 1x10000 matrix

ii= ii+1;
end

欢迎批评和更新我的代码。谢谢!

【讨论】:

  • 您可以在此处使用for ii = 1:10000 代替while,除了更易于阅读之外没有区别。如果你在循环前加上meandif=zeros(10000,1),你的代码会快很多(这叫做预分配)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-12
  • 1970-01-01
  • 2021-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多