Matlab:按行排序

z3d*_*3dd 4 sorting matlab

为什么这样呢

t = magic(4);
k = 1:4;
tt(k,:) = sort(t(k,:)) % 
Run Code Online (Sandbox Code Playgroud)

在每列内部排序值(交换行和列不执行任何操作),但这样做

t = magic(4);
for k = 1:4
  tt(k,:) = sort(t(k,:))
end
Run Code Online (Sandbox Code Playgroud)

按预期排序行内的值?

dfr*_*fri 10

在下面的

t = magic(4);
k = 1:4;
tt(k,:) = sort(t(k,:)) % 
Run Code Online (Sandbox Code Playgroud)

t(k,:)是一个4x4 矩阵.因此,sort将应用其默认的1-dim排序,即wrt行.请注意,您可以告诉您sort沿第二维排序.即,wrt列,by

tt(k,:) = sort(t(k,:),2)
Run Code Online (Sandbox Code Playgroud)

在你的另一种情况下,k是一个整数,t(k,:)是1x4 行向量 ; 因此,将对列进行排序.

t = magic(4);
for k = 1:4
  tt(k,:) = sort(t(k,:))
end
Run Code Online (Sandbox Code Playgroud)

最后,请注意@Luis Mendo:以下评论中的澄清,我将在此处包括以防删除评论:

只是一个澄清:默认情况下sort(像大多数Matlab函数一样),不是沿着第一个暗淡的方向工作,而是沿着第一个非单一的暗淡.如果输入矩阵可以是行向量,则区别很重要.

  • 只是澄清一下:默认情况下`sort`(和大多数Matlab函数一样),不是沿着第一个昏暗的方向工作,而是沿着_first非singleton_dim工作.如果输入矩阵可以是行向量,则区别很重要 (3认同)
  • 这是一个有价值的明确补充,谢谢@LuisMendo. (2认同)

Dan*_*Dan 5

" 如预期那样对行内的值进行排序?" 这是一个错误的假设.MATLAB使用列主要排序.默认情况下,您应该期望MATLAB函数对列进行操作.试用功能,如sum,max,min等上一个二维矩阵,你会看到它总是默认工作下来列.这些函数中的大多数都有一个参数来指定您应该使用哪个维度,例如

sum(M,2)
Run Code Online (Sandbox Code Playgroud)

将沿着sum(M)(或者sum(M,1)就此而言)对列进行求和的行进行求和.

dfri的答案显示你的第一种情况是调用整个2D矩阵,t而你的第二种情况t是逐行调用.当任何上述函数在1Dvector,行或列上运行时,它将对忽略维度的整个向量进行操作.