如果要避免循环,可以结合使用reshape和sort来实现所需的功能:
b = [5 4 1 2 3 1 4 5 3 2 3 2 1 5 4];
b2 = reshape(b, [5 3]); % Reshape your array to be a [5x3] matrix
b2_new = sort(b2, 1); % Sort each column of your matrix seperately
b_new = reshape(b2_new, size(b)); % Reshape the outcome back to the original dimensions
或者,全部在一行中:
b_new = reshape(sort(reshape(b, [5 3]), 1), size(b));
当然,您必须更改数字5和3以适合您的问题。 重要的是要确保您为重塑命令输入的第一个值(在本例中为5 )等于您要排序的子向量的长度,因为Matlab是列主要的。
编辑:
如果要对一个特定的向量进行排序,然后对其他向量应用相同的重新排序,则可以使用sort函数的可选第二个输出参数。 使用与上述相同的向量:
b = [5 4 1 2 3 1 4 5 3 2 3 2 1 5 4];
b2 = reshape(b, [5 3]);
产量:
b2 = 5 1 3
4 4 2
1 5 1
2 3 5
3 2 4
假设您要对第一列进行排序,并对第二和第三列应用相同的重新排序,则可以执行以下操作:
[~,idx]