首页 > 解决方案 > Numpy连接+合并一维数组

问题描述

我需要连接数组,但如果它们重叠,还需要将 A 的结尾与 B 的开头合并。

[1, 2, 4] + [2, 4, 5] -> [1, 2, 4, 5]
[1, 2, 4] + [2, 5, 4] -> [1, 2, 4, 2, 5, 4]
[1, 2, 4] + [1, 2, 4, 5] -> [1, 2, 4, 5]

注意:必须保留元素的顺序,[4, 5] 与 [5, 4] 不同。

注 2:这个问题也可以这样理解:我们需要 A 的最短可能扩展,使得输出以 B 结尾。

当然,我可以遍历第二个数组并逐个元素进行比较,但我正在寻找一个不错的 Numpy 解决方案。

标签: pythonarraysperformancenumpy

解决方案


原来是误会了问题。问题在于我的理解:

Two item suffix of A matches 2 item prefix of B:
[1, 2, 4] +
   [2, 4, 5] =>
[1, 2, 4, 5]

No suffix of A matches a prefix of B:
[1, 2, 4] + 
         [2, 5, 4] -> 
[1, 2, 4, 2, 5, 4]

然后我们可以使用这个非常低效的函数:

def merge(A,B):
    i = 0
    m = 0
    # Find largest suffix of A that matches the prefix of B with the same length
    while i <= len(A):
        if A[-i:] == B[:i] and i > m:
            m = i
        i += 1
    return A + B[m:]

推荐阅读