为什么这样呢
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函数一样),不是沿着第一个暗淡的方向工作,而是沿着第一个非单一的暗淡.如果输入矩阵可以是行向量,则区别很重要.
" 如预期那样对行内的值进行排序?" 这是一个错误的假设.MATLAB使用列主要排序.默认情况下,您应该期望MATLAB函数对列进行操作.试用功能,如sum,max,min等上一个二维矩阵,你会看到它总是默认工作下来列.这些函数中的大多数都有一个参数来指定您应该使用哪个维度,例如
sum(M,2)
Run Code Online (Sandbox Code Playgroud)
将沿着sum(M)(或者sum(M,1)就此而言)对列进行求和的行进行求和.
dfri的答案显示你的第一种情况是调用整个2D矩阵,t而你的第二种情况t是逐行调用.当任何上述函数在1Dvector,行或列上运行时,它将对忽略维度的整个向量进行操作.