Matlab 矩阵行内的置换元素

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

我有一个矩阵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 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