Matlab 矩阵行内的置换元素
我有一个矩阵a 我想随机排列每行中的元素。例如,矩阵A2 我可以用一个向量来实现这一点:Matlab 矩阵行内的置换元素,matlab,matrix,element,permutation,Matlab,Matrix,Element,Permutation,我有一个矩阵a 我想随机排列每行中的元素。例如,矩阵A2 我可以用一个向量来实现这一点: Av = [0 1 2 3 4]; Bv = Av(randperm(5)); 但我不确定如何在矩阵中一行一行地执行此操作,以及如何仅排列给定行中的元素。这可能吗?我可以用许多置换向量构造一个矩阵,但我不想这样做 谢谢。您可以对任意大小的随机数组使用排序(这就是randperm所做的)。在那之后,您只需要做一些索引技巧来正确地重新排列数组 A = [0 0 0 0 1; 0 0 0 0 2; 0 1 2
Av = [0 1 2 3 4];
Bv = Av(randperm(5));
但我不确定如何在矩阵中一行一行地执行此操作,以及如何仅排列给定行中的元素。这可能吗?我可以用许多置换向量构造一个矩阵,但我不想这样做
谢谢。您可以对任意大小的随机数组使用
排序
(这就是randperm
所做的)。在那之后,您只需要做一些索引技巧来正确地重新排列数组
A = [0 0 0 0 1; 0 0 0 0 2; 0 1 2 3 4];
[nRows,nCols] = size(A);
[~,idx] = sort(rand(nRows,nCols),2);
%# convert column indices into linear indices
idx = (idx-1)*nRows + ndgrid(1:nRows,1:nCols);
%# rearrange A
B = A;
B(:) = B(idx)
B =
0 0 1 0 0
0 2 0 0 0
2 1 3 4 0
请注意,对于旧版本的matlab,您可以通过将
~
替换为XXX
感谢@Jonas使其工作。我肯定需要学习更多关于索引及其技巧的知识。
Av = [0 1 2 3 4];
Bv = Av(randperm(5));
A = [0 0 0 0 1; 0 0 0 0 2; 0 1 2 3 4];
[nRows,nCols] = size(A);
[~,idx] = sort(rand(nRows,nCols),2);
%# convert column indices into linear indices
idx = (idx-1)*nRows + ndgrid(1:nRows,1:nCols);
%# rearrange A
B = A;
B(:) = B(idx)
B =
0 0 1 0 0
0 2 0 0 0
2 1 3 4 0