You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

对表格相似行按相似度聚类排序的适用算法是什么?

如何实现表格行按相似度相邻排序?

假设我们有一个包含两列的表格,表格内存储了相关数据,我们的目标是对该表格的行进行排序。

假设我们的数据如下所示,其中y1和y2是列中的数据。
van der Pol方程求解结果

你可以使用MATLAB或GNU Octave生成上述图表:

% 模型仿真
[t,y] = ode45(@odefunc,[0 20],[1; -2]);

% 绘制仿真结果
close all
plot(t,y(:,1),'-r',t,y(:,2),'-b')
title('使用ODE45求解范德波尔方程(\mu = 1)的结果');
xlabel('时间 t');
ylabel('解 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

如果从上方观察该图表,数据会呈现如下形态:
热力图形式的数值展示

你可以使用如下代码生成该图表:

% 绘制3D柱状图
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

生成该表格的代码如下:

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

可以看到表格中有4行0 2 4、3行5 7 9。我希望所有0 2 4的行相邻排列,所有5 7 9的行相邻排列,且0 2 4不能排在5 7 9之后,否则生成的可视化效果会很差。

例如,我们从第一行row 1也就是0 2 4开始排序,先找出所有4行0 2 4排列在一起:

0 2 4
0 2 4
0 2 4
0 2 4

接下来处理下一类行1 3 5,找到2行后相邻排列:

0 2 4
0 2 4
0 2 4
0 2 4
1 3 5
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之前或之后都可以。但我怎么判断1 2 4应该排在0 2 4附近?这就是核心问题!

我要怎么实现这种排序?

由于速度要求很高,最终需要用C语言实现,我打算先在GNU Octave中做原型验证,我猜测这类需求有对应的SQL排序算法可以参考。

注意:实际应用场景中的数据都是10位整数,取值范围为0-1023。

内容的提问来源于stack exchange,提问作者euraad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.19 07:06:03