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
附近?”一针见血,但这正是我们无法帮助你的地方。您需要决定元组彼此相似意味着什么。有多种可能性,基于不同选择的排序或分组将产生不同的结果。