【问题标题】:How do I combine two numpy arrays element wise in python?如何在 python 中明智地组合两个 numpy 数组元素?
【发布时间】: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 内存进行测试

【问题讨论】:

标签: python arrays python-2.7 numpy


【解决方案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())
      
      1. A.tolist() 将产生 [1, 3, 5, 7]
      2. B.tolist() 将产生 [2, 4, 6, 8]
      3. A.tolist() + B.tolist() - [1, 3, 5, 7, 2, 4, 6, 8]
      4. sorted(...) - [1, 2, 3, 4, 5, 6, 7, 8]

      没有排序:

      C = [y for x in zip(A, B) for y in x]
      

      【讨论】:

      • 我不希望对元素进行排序,因为这些实际上是不按值顺序排列的数据样本。我的测试中使用了您的第二个选项。
      猜你喜欢
      • 2018-05-13
      • 2023-03-25
      • 1970-01-01
      • 1970-01-01
      • 2021-08-23
      • 2022-07-29
      • 1970-01-01
      • 1970-01-01
      • 2013-12-09
      相关资源
      最近更新 更多