合并排序对

泽克连

我有两个(或更多,但如果求解两个,则求解任何数字)2×N 矩阵,它们表示具有 x(第一行)和 y(第二行)坐标的点。这些点总是按递增的 x 坐标排序。我想要做的是我想将这两个矩阵合并成一个 3×N 矩阵,这样如果两个点(每个矩阵中的一个)具有相同的 x 坐标,它们将在新矩阵中形成一列,第一个行是 x 坐标,第二行和第三行是两个 y 坐标。但是,如果一个矩阵中有一个点的 x 坐标不同于第二个矩阵中的所有其他点,

最好通过例子来解释。

第一个矩阵:

1  3  5  7  % x coordinate
1  2  3  4  % y coordinate

第二个矩阵:

2  3  4  7  8  % x coordinate
5  6  7  8  9  % y coordinate

想要的结果:

1    2  3  4  5  7  8  % x coordinate
1    1  2  2  3  4  4  % y coordinate from first matrix
NaN  5  6  7  7  8  9  % y coordinate from second matrix

我的问题是,如何在 matlab/octave 和 numpy 中有效地做到这一点(实际上,因为我总是可以使用循环“手动”执行此操作,但这似乎不对。)

尼基·马特森

您可以使用interp1和 关键字'previous'策略('nearest'如果您不关心它是更大还是更小,您也可以选择)和'extrap'允许外推。

定义矩阵

a=[...
1  3  5  7;... 
1  2  3  4];

b=[...
2  3  4  7  8;...
5  6  7  8  9];

然后找到插值点

x = unique([a(1,:),b(1,:)]);

并插值

[x ; interp1(a(1,:),a(2,:),x,'previous','extrap') ; interp1(b(1,:),b(2,:),x,'previous','extrap') ]

时间结果:

我测试了算法

n = 1e6;
a = cumsum(randi(3,2,n),2);
b = cumsum(randi(2,2,n),2);

并得到:

  • 狼:1.7473 秒
  • 缺陷:0.4927 秒
  • 我的:0.2757 秒

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章