如何匹配两个不等长的numpy数组?

2024-06-07 03:58:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个一维纽比阵列。长度不相等。我想把彼此靠近的元素配对(array1_elemnt,array2_element)。让我们考虑下面的例子

    a = [1,2,3,8,20,23]
    b = [1,2,3,5,7,21,35]

预期结果是

^{pr2}$

需要注意的是5是单独的。它可以很容易地通过循环来完成,但我有非常大的数组。我考虑过用最近的邻居。但感觉就像用大炮杀了一只麻雀。在

有谁能提出一个优雅的解决方案吗。在

非常感谢。在


Tags: 元素数组element解决方案例子感觉麻雀pr2
3条回答

您可以使用内置的map函数来向化一个执行此操作的函数。例如:

ar1 = np.array([1,2,3,8,20,23])
ar2 = np.array([1,2,3,5,7,21,35])
def closest(ar1, ar2, iter):
    x = np.abs(ar1[iter] - ar2)
    index = np.where(x==x.min())
    value = ar2[index]
    return value

def find(x):
    return closest(ar1, ar2, x)
c = np.array(map(find, range(ar1.shape[0])))

在上面的示例中,您似乎希望在值配对后排除它们。在这种情况下,可以像这样在第一个函数中包含一个删除过程,但是要非常小心数组1是如何排序的:

^{pr2}$

使用Needleman-Wunsch算法怎么样?:)

评分矩阵将是微不足道的,因为两个数字之间的“距离”只是它们的差异。在

但可能会觉得像是一个坦克在杀麻雀。。。在

我能想到的最好的方法是使用循环。如果python中的循环很慢,可以使用Cython来加快代码的速度。在

相关问题 更多 >