首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单元阵列中每个单元的随机排列

单元阵列中每个单元的随机排列
EN

Stack Overflow用户
提问于 2015-07-24 12:36:37
回答 1查看 329关注 0票数 0

我有一个1乘4的细胞阵列,D.每个单元元素包含2×2双矩阵.我想要独立地对每个矩阵进行随机排列,这样就可以得到与D相同大小的单元阵,但是它的矩阵元素会被置换,然后是逆的,以便再次得到原始的D

对于单个矩阵情况,我有代码,它工作得很好,如下所示:

代码语言:javascript
复制
A=rand(3,3)
p=randperm(numel(A));
A(:)=A(p)
[p1,ind]=sort(p);
A(:)=A(ind)

但它不适用于细胞阵列。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-24 14:19:21

对于您来说,最简单的解决方案是使用循环:

代码语言:javascript
复制
nd = numel(D);
D_permuted{1,nd} = [];
D_ind{1,nd} = [];
for d = 1:nd)
    A=D{d};
    p=randperm(numel(A));
    A(:)=A(p)
    [~,ind]=sort(p);

    D_permuted{d} = A;
    D_ind{d} = ind;
end

假设您的D矩阵只是一个大小相同的矩阵(例如,2×2),那么您可以使用三维双矩阵而不是单元数组来避免循环。

例如,如果您拥有这样一个D

代码语言:javascript
复制
n = 5;
D = repmat([1,3;2,4],1,1,n)*10  %// Example data

然后你就可以像这样做排列

代码语言:javascript
复制
m = 2*2;  %// Here m is the product of the dimensions of each matrix you want to shuffle
[~,I] = sort(rand(m,n));  %// This is just a trick to get the equivalent of a vectorized form of randperm as unfortunately randperm only accepts scalars
idx = reshape(I,2,2,n);
D_shuffled = D(idx);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31610724

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档