【问题标题】:making new subarrays from two arrays with numpy用 numpy 从两个数组创建新的子数组
【发布时间】:2021-12-14 18:09:47
【问题描述】:

我正在学习 numpy,我需要弄清楚如何从两个已定义的 numpy 数组创建一个新的 numpy 数组,其中新数组实际上是从数组 1 的元素“映射”到数组 2 的元素。

我的意思是,对于:

array1 = [6,8,9]
array2 = [1, 2, 3]

那么结果数组需要相等:

[[6,1], [6,2], [6,3], [8,1], [8,2], [8,3], [9,1], [9,2], [9,3]]

我想知道如何使用特定于 numpy 的函数来执行此操作(因此没有用于单独遍历数组元素的“for”循环)

【问题讨论】:

    标签: python arrays list numpy


    【解决方案1】:

    使用np.meshgrid:

    import numpy as np
    
    array1 = [6, 8, 9]
    array2 = [1, 2, 3]
    
    
    def mesh(values):
        return np.array(np.meshgrid(*values)).T.reshape(-1, len(values))
    
    
    res = mesh([array1, array2])
    print(res)
    

    输出

    [[6 1]
     [6 2]
     [6 3]
     [8 1]
     [8 2]
     [8 3]
     [9 1]
     [9 2]
     [9 3]]
    

    【讨论】:

    • 这很有帮助,谢谢!
    【解决方案2】:

    您可以像下面这样使用itertools.product

    array1 = [6,8,9]
    array2 = [1,2,3]
    
    import itertools
    lst = [array1] + [array2]
    res = list(map(list, (itertools.product(*lst))))
    print(res)
    

    或者您可以使用np.meshgridnp.c_,如下所示:

    import numpy as np
    mesharr1 , mesharr2 = np.meshgrid(array1, array2)
    res = np.c_[mesharr1.ravel(), mesharr2.ravel()]
    print(res)
    

    输出:(两个代码)

    [[6, 1], [6, 2], [6, 3], [8, 1], [8, 2], [8, 3], [9, 1], [9, 2], [9, 3]]
    

    【讨论】:

      猜你喜欢
      • 2017-12-30
      • 2012-05-12
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多