gpt4 book ai didi

python - 在 numpy 中混合数组的最快方法?

转载 作者:行者123 更新时间:2023-11-28 19:35:23 28 4
gpt4 key购买 nike

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

我想混合一对数组,以便它们的序列逐个元素插入示例:使用 a 和 b,结果应为

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

我需要在数千个序列上使用成对的长数组(超过一百个元素)来做到这一点。有什么比在每个数组上逐个元素地酸洗更聪明的想法吗?谢谢

最佳答案

c = np.empty(len(a)+len(b), dtype=a.dtype)
c[::2] = a
c[1::2] = b

(假设 ab 具有相同的 dtype。)

你问的是最快的,所以这里是一个时序对比(vstackravelempty都是numpy函数):

In [40]: a = np.random.randint(0, 10, size=150)

In [41]: b = np.random.randint(0, 10, size=150)

In [42]: %timeit vstack((a,b)).T.flatten()
100000 loops, best of 3: 5.6 µs per loop

In [43]: %timeit ravel([a, b], order='F')
100000 loops, best of 3: 3.1 µs per loop

In [44]: %timeit c = empty(len(a)+len(b), dtype=a.dtype); c[::2] = a; c[1::2] = b
1000000 loops, best of 3: 1.94 µs per loop

使用vstack((a,b)).T.flatten(),复制ab创建 vstack((a,b)),然后通过flatten()方法再次复制数据。

ravel([a, b], order='F') 实现为asarray([a, b]).ravel(order),这需要复制 ab,然后复制结果以创建具有 order='F' 的数组。 (如果你只是做ravel([a, b]),它和我的答案差不多速度,因为它不需要再次复制数据。不幸的是,order=需要 'F' 才能获得交替模式。)

所以其他两种方法复制数据两次。在我的版本中,每个数组都被复制一次。

关于python - 在 numpy 中混合数组的最快方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26325412/

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