如何在 python 中明智地组合两个 numpy 数组元素?
Posted
技术标签:
【中文标题】如何在 python 中明智地组合两个 numpy 数组元素?【英文标题】:How do I combine two numpy arrays element wise in python? 【发布时间】:2013-07-11 06:17:04 【问题描述】:我有两个 numpy 数组:
A = np.array([1, 3, 5, 7])
B = np.array([2, 4, 6, 8])
我想通过将两者结合得到以下结果:
C = [1, 2, 3, 4, 5, 6, 7, 8]
我可以通过使用zip
得到一些接近的东西,但不是我想要的:
>>> zip(A, B)
[(1, 2), (3, 4), (5, 6), (7, 8)]
如何明智地组合两个 numpy 数组元素?
我对每个数组中的 50,000 个元素(100,000 个组合元素)进行了快速测试。结果如下:
User Ma3x: Time of execution: 0.0343832323429 Valid Array?: True
User mishik: Time of execution: 0.0439064509613 Valid Array?: True
User Jaime: Time of execution: 0.02767023558 Valid Array?: True
使用 Python 2.7、Windows 7 Enterprise 64 位、Intel Core i7 2720QM @2.2 Ghz Sandy Bridge、8 GB 内存进行测试
【问题讨论】:
这是我用来测试的a link to the code。 【参考方案1】:使用np.insert
:
>>> A = np.array([1, 3, 5, 7])
>>> B = np.array([2, 4, 6, 8])
>>> np.insert(B, np.arange(len(A)), A)
array([1, 2, 3, 4, 5, 6, 7, 8])
【讨论】:
对于N-D array
,您还应该传递axis
参数以指示要沿哪个轴插入新数组...【参考方案2】:
你也可以使用切片:
C = np.empty((A.shape[0]*2), dtype=A.dtype)
C[0::2] = A
C[1::2] = B
【讨论】:
【参考方案3】:一些答案建议进行排序,但由于您想将它们组合起来,因此按元素排序不会达到相同的结果。
这是一种方法
C = []
for elem in zip(A, B):
C.extend(elem)
【讨论】:
【参考方案4】:>>> import numpy as np
>>> A=np.array([1,3,5,7])
>>> B=np.array([2,4,6,8])
>>> C=np.dstack([A,B])
>>> D=C.reshape((1,8))[0]
>>> D
array([1, 2, 3, 4, 5, 6, 7, 8])
【讨论】:
一个简短的描述会很好。谢谢。 对此有几个变体:np.dstack([A,B]).flatten()
和 np.array([A,B]).T.flatten()
您的回答时间为 267 我们,而 Jamie 插入方法为 8.59 毫秒(加速 300 倍)。【参考方案5】:
你可以试试这个:
C = sorted(A.tolist() + B.tolist())
A.tolist()
将产生 [1, 3, 5, 7]
B.tolist()
将产生 [2, 4, 6, 8]
A.tolist() + B.tolist()
- [1, 3, 5, 7, 2, 4, 6, 8]
sorted(...)
- [1, 2, 3, 4, 5, 6, 7, 8]
没有排序:
C = [y for x in zip(A, B) for y in x]
【讨论】:
我不希望对元素进行排序,因为这些实际上是不按值顺序排列的数据样本。我的测试中使用了您的第二个选项。以上是关于如何在 python 中明智地组合两个 numpy 数组元素?的主要内容,如果未能解决你的问题,请参考以下文章
给定两个 2D numpy 数组 A 和 B,如何有效地将采用两个 1D 数组的函数应用于 A 和 B 行的每个组合?