Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 对表中的行进行排序时使用什么算法?_Matlab_Sorting - Fatal编程技术网

Matlab 对表中的行进行排序时使用什么算法?

Matlab 对表中的行进行排序时使用什么算法?,matlab,sorting,Matlab,Sorting,假设我们有一个有两列的表。该表包含数据,我们的目标是对该表进行排序 j = 0; rows = 20; for i = 1:rows disp(sprintf("%i %i %i", j, j+2, j+4)) j = j + 1; if(j + 4 >= 10) j = 0; end end 假设我们的数据如下所示,其中y1和y2是列中的数据 您可以使用MATLAB或GNU倍频程生成该绘图 % Simulate the model [t,y

假设我们有一个有两列的表。该表包含数据,我们的目标是对该表进行排序

j = 0;
rows = 20;
for i = 1:rows
  disp(sprintf("%i %i %i", j, j+2, j+4))
  j = j + 1;
  if(j + 4 >= 10)
    j = 0;
  end
end
假设我们的数据如下所示,其中
y1
y2
是列中的数据

您可以使用MATLAB或GNU倍频程生成该绘图

% Simulate the model
[t,y] = ode45(@odefunc,[0 20],[1; -2]);

% Plot the simulation
close all
plot(t,y(:,1),'-r',t,y(:,2),'-b')
title('Solution of van der Pol Equation (\mu = 1) with ODE45');
xlabel('Time t');
ylabel('Solution y');
legend('y_1','y_2')
grid on

function dydt = odefunc(t,y)
  dydt = [y(2); (1-0.1*y(1)^2)*y(2)-y(1) + 1];
end
如果我们在绘图上方查看,我们将使用如下数据:

可以使用以下代码创建该绘图:

% Plot 3D bar
figure
imagesc(y)
colorbar
在这里,我们可以看到,情节非常像一个“表外观”我的问题是在对表中的行进行排序时使用什么算法,以便每个看起来几乎相同的行在表中都有自己独特的位置

例如,如果我们有一张这样的桌子

0 2 4
1 3 5
2 4 6
3 5 7
4 6 8
5 7 9
0 2 4
1 3 5
2 4 6
3 5 7
4 6 8
5 7 9
0 2 4
1 3 5
2 4 6
3 5 7
4 6 8
5 7 9
0 2 4
1 3 5
0 2 4
0 2 4
0 2 4
0 2 4
1 3 5
1 3 5
2 4 6
2 4 6
2 4 6
2 4 6
3 5 7
3 5 7
3 5 7
.
.
.
.
5 7 9
5 7 9
5 7 9
如果要创建该表,请输入代码

j = 0;
rows = 20;
for i = 1:rows
  disp(sprintf("%i %i %i", j, j+2, j+4))
  j = j + 1;
  if(j + 4 >= 10)
    j = 0;
  end
end
我们可以看到有四行
024
和三行
579
。 我希望所有行
024
彼此靠近,所有行
579
彼此靠近。还有<代码>0 2 4不能在
5 7 9
之后,因为这样绘图看起来会很糟糕

例如,假设我们从
第1行开始,第一行
024
。然后我们寻找相同的
024
行,假设我们找到了四行
024
。然后我们把它们分类

0 2 4
0 2 4
0 2 4
0 2 4
现在下一行是
135
,我们找到两行
1355
。我们正在整理它们

0 2 4
0 2 4
0 2 4
0 2 4
1 3 5
1 3 5
在我们整理了一段时间之后,我们将有一张这样的桌子

0 2 4
1 3 5
2 4 6
3 5 7
4 6 8
5 7 9
0 2 4
1 3 5
2 4 6
3 5 7
4 6 8
5 7 9
0 2 4
1 3 5
2 4 6
3 5 7
4 6 8
5 7 9
0 2 4
1 3 5
0 2 4
0 2 4
0 2 4
0 2 4
1 3 5
1 3 5
2 4 6
2 4 6
2 4 6
2 4 6
3 5 7
3 5 7
3 5 7
.
.
.
.
5 7 9
5 7 9
5 7 9
现在,我们发现了
1 2 4
,这与
0 2 4
非常相似。因此,我们需要将
1 2 4
放在
0 2 4
附近,可能在
0 2 4
1 3 5
之间,或者在
0 2 4
之后,或者在
0 2 4
之前。我怎么知道
1 2 4
应该放在
0 2 4
附近这就是问题所在

我该怎么分类呢

我需要用C语言编程,因为速度在这里是最重要的,但我想我会用GNUOctave开始。我很确定我正在寻找一种SQL排序算法


注意实际上,在0-1023之间有数字、整数、10位值等。

必须定义“相似性”。一旦定义了相似性,就可以为其编写函数,并使用例如
qsort
进行排序
qsort
调用函数,返回值告诉
qsort
是否交换项目。任何数据都可以以表格形式显示。你的“看起来像一张桌子”的观察没有错,但也没有太大的相关性。在某种程度上,DBMS系统喜欢使用排序算法,这些决策是由DB实现用于存储数据的数据结构驱动的,而不是由数据本身的结构驱动的。@PaulOgilvie嗯,我可以说每个值为“+-2”。例如,查找所有
0 2 4
,其中
0 2 4
中的每个索引的公差可以为
+-2
qsort
对我来说合适吗?不是相似性,而是相对顺序。相似性度量是完全不同的事情,按相似性分组与排序是完全不同的事情。@DanielMårtensson,我认为你的问题“我怎么知道
1 2 4
应该放在
0 2 4
附近?”一针见血,但这正是我们无法帮助你的地方。您需要决定元组彼此相似意味着什么。有多种可能性,基于不同选择的排序或分组将产生不同的结果。