如何在MATLAB中随机置换3D矩阵中的列
||
我有3D矩阵(10000 x 60 x 20),并且需要置换第二和第三维以保持列完整。
对于2D矩阵,我使用RANDPERM:
pidx = randperm(size(A,2));
Aperm = A(:,pidx);
我不能只两次应用RANDPERM-首先是列索引,然后是页面索引。随机性不足。
一种解决方案是将矩阵从3D压缩为2D,将列和页面压缩为列,对其进行置换,然后重新成形。但是我也想以这样的方式进行排列,即每个页面的列独立排列。就像是:
Aperm = zeros(size(A));
for p=1:size(A,3)
pidx = randperm(size(A,2));
Aperm(:,:,p) = A(:,pidx,p);
end
我可以更有效地做到吗?还有更好的方法吗?
没有找到相关结果
已邀请:
3 个回复
哭木算
解决方案2:在每个页面中独立地排列列(相当于for循环) 我也想在 这样列排列的方式 每页独立
惜堡沁戚
而且,与MATLAB中的许多问题一样,有许多不同的方法可以解决此问题。这是另一种解决方案,通过仅使用线性索引到
来避免矩阵重塑:
亥套惟间连
。尽管我更喜欢
,但是如果您碰巧与不了解
在这里做什么的人共享代码,这是一个更安全的选择(我是从经验中得出的)。但是我必须注意,如果
变大,这会影响性能(在您的情况下,这是可以的)。