我试图在matlab中对一组数组进行排序,但函数sortrows无法正确执行。
我正在按第一列和第二列排序。
以下就是一个例子
X = [0 0 0.0000
0 0.2500 -0.3347
0.2500 0.2500 0.0010
0.2500 0 0.3357
0 0.5000 -0.0000
0.2500 0.5000 0.3357
0 0.7500 0.3347
0.2500 0.7500 0.6704
0 1.0000 0.0000
0.2500 1.0000 0.3357
0.5000 0.2500 -0.3347
0.5000 0 0.0000
0.5000 0.5000 -0.0000
0.5000 0.7500 0.3347
0.5000 1.0000 0.0000
0.7500 0.2500 -0.6704
0.7500 0 -0.3357
0.7500 0.5000 -0.3357
0.7500 0.7500 -0.0010
0.7500 1.0000 -0.3357
1.0000 0.2500 -0.3347
1.0000 0 0.0000
1.0000 0.5000 -0.0000
1.0000 0.7500 0.3347
1.0000 1.0000 0.0000]
X_sorted = sortrows(X,[1 2])
X_sorted = [0 0 0.0000
0 0.2500 -0.3347
0 0.5000 -0.0000
0 0.7500 0.3347
0 1.0000 0.0000
0.2500 0.2500 0.0010
0.2500 0.5000 0.3357
0.2500 0.7500 0.6704
0.2500 0 0.3357
0.2500 1.0000 0.3357
0.5000 0.2500 -0.3347
0.5000 0.5000 -0.0000
0.5000 0.7500 0.3347
0.5000 0 0.0000
0.5000 1.0000 0.0000
0.7500 0 -0.3357
0.7500 1.0000 -0.3357
0.7500 0.2500 -0.6704
0.7500 0.5000 -0.3357
0.7500 0.7500 -0.0010
1.0000 0 0.0000
1.0000 0.2500 -0.3347
1.0000 0.5000 -0.0000
1.0000 0.7500 0.3347
1.0000 1.0000 0.0000]
现在,您可以在示例中看到,函数对第一列进行排序,但不对第二列进行排序。
我正在使用Matlab 2018b
我想要的结果是:
X_sorted = [0 0 0.0000
0 0.2500 -0.3347
0 0.5000 -0.0000
0 0.7500 0.3347
0 1.0000 0.0000
0.2500 0 0.3357
0.2500 0.2500 0.0010
0.2500 0.5000 0.3357
0.2500 0.7500 0.6704
0.2500 1.0000 0.3357
0.5000 0 0.0000
0.5000 0.2500 -0.3347
0.5000 0.5000 -0.0000
0.5000 0.7500 0.3347
0.5000 1.0000 0.0000
0.7500 0 -0.3357
0.7500 0.2500 -0.6704
0.7500 0.5000 -0.3357
0.7500 0.7500 -0.0010
0.7500 1.0000 -0.3357
1.0000 0 0.0000
1.0000 0.2500 -0.3347
1.0000 0.5000 -0.0000
1.0000 0.7500 0.3347
1.0000 1.0000 0.0000]
使用format long
,然后再次查看第一列中的值。它们很可能是非常相似但不完全相同的值。
解决这个问题的一种方法是将数组中的数字四舍五入到4位小数:
X = round(X,4);
这里有些不对劲,下面是我使用MATLAB R2020a:得到的结果
>> sortrows(X,[1,2])
ans =
0 0 0
0 0.2500 -0.3347
0 0.5000 0
0 0.7500 0.3347
0 1.0000 0
0.2500 0 0.3357
0.2500 0.2500 0.0010
0.2500 0.5000 0.3357
0.2500 0.7500 0.6704
0.2500 1.0000 0.3357
0.5000 0 0
0.5000 0.2500 -0.3347
0.5000 0.5000 0
0.5000 0.7500 0.3347
0.5000 1.0000 0
0.7500 0 -0.3357
0.7500 0.2500 -0.6704
0.7500 0.5000 -0.3357
0.7500 0.7500 -0.0010
0.7500 1.0000 -0.3357
1.0000 0 0
1.0000 0.2500 -0.3347
1.0000 0.5000 0
1.0000 0.7500 0.3347
1.0000 1.0000 0
正如您所看到的,第二列的排序是正确的。你使用的是什么版本的MATLAB?你确定你的路径上没有sorrows
的版本来隐藏内置版本吗?(用which sortrows
检查(