【发布时间】:2012-02-01 10:27:42
【问题描述】:
关于 matlab 和关于行和列的 3d 矩阵随机化的问题。
我有一个 n x n x s 矩阵 M,我想把它弄乱一点,但有一些控制。
我可以通过 for 循环实现我的愿望
for j=1:size(M,3)
r=randperm(size(M,1));
random_M(:,:,j)=M(r,r,j);
end
有没有一种方法可以在不循环 j 的情况下执行此操作?我需要多次随机化迭代,并且可以负担索引的好处。
干杯!
编辑:在 Alexandrew 的 cmets 之后的一些想法
我创建了一个随机化 M 的压缩版本的函数:
function randomMat=randomiseMat(Mat)
[rows,cols]=size(Mat);
r=randperm(rows);
randomMat=Mat(r,r);
然后,使用 arrayfun 我似乎得到了我想要的:
randomM=arrayfun(@(x) randomiseMat(M(:,:,x)),1:size(M,3),'UniformOutput', false)
然而,randomM 现在是一个大小为 (1,size(M,3)) 的元胞数组,每个元胞都包含随机数组。
有没有办法像输入 M 一样在 3d 矩阵中制作它?
【问题讨论】:
-
arrayfun可能对你有帮助:)
标签: matlab