sortrows在MATLAB中无法正确排序



我试图在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检查(

相关内容

  • 没有找到相关文章