我有两个(或更多,但如果求解两个,则求解任何数字)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);
并得到:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句