gpt4 book ai didi

python - 合并两个数组并排序

转载 作者:太空狗 更新时间:2023-10-29 17:09:21 25 4
gpt4 key购买 nike

给定如下两个排序数组:

a = array([1,2,4,5,6,8,9])

b = array([3,4,7,10])

我希望输出为:

c = array([1,2,3,4,5,6,7,8,9,10])

或:

c = array([1,2,3,4,4,5,6,7,8,9,10])

我知道我可以执行以下操作:

c = unique(concatenate((a,b))

我只是想知道是否有更快的方法,因为我正在处理的数组有数百万个元素。

欢迎任何想法。谢谢

最佳答案

因为你使用 numpy,我怀疑 bisec 对你有任何帮助......所以我建议做两个较小的事情:

  1. 不要使用np.sort,而是使用c.sort() 方法来对数组进行就地排序并避免复制。
  2. np.unique 必须使用 np.sort 不到位。因此,不要使用 np.unique 手动执行逻辑。 IE。首先排序(就地),然后用 flag = np.concatenate(([True], ar[1: ] != ar[:-1]))unique = ar[flag] (对 ar 进行排序)。为了更好一点,您可能应该自己进行标志操作,即。 flag = np.ones(len(ar), dtype=bool) 然后是 np.not_equal(ar[1:], ar[:-1], out=flag[1: ]) 这基本上避免了 flag 的完整副本。
  3. 我不确定。但是 .sort 有 3 种不同的算法,因为您的数组可能几乎已经排序,更改排序方法可能会导致速度差异。

这将使完整的东西接近你得到的东西(事先没有做独特的):

def insort(a, b, kind='mergesort'):
# took mergesort as it seemed a tiny bit faster for my sorted large array try.
c = np.concatenate((a, b)) # we still need to do this unfortunatly.
c.sort(kind=kind)
flag = np.ones(len(c), dtype=bool)
np.not_equal(c[1:], c[:-1], out=flag[1:])
return c[flag]

关于python - 合并两个数组并排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12427146/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com