Using numpy to build an array of all combinations of two arrays

后端 未结 10 1301
温柔的废话
温柔的废话 2020-11-22 00:41

I\'m trying to run over the parameters space of a 6 parameter function to study it\'s numerical behavior before trying to do anything complex with it so I\'m searching for a

10条回答
  •  灰色年华
    2020-11-22 01:29

    In newer version of numpy (>1.8.x), numpy.meshgrid() provides a much faster implementation:

    @pv's solution

    In [113]:
    
    %timeit cartesian(([1, 2, 3], [4, 5], [6, 7]))
    10000 loops, best of 3: 135 µs per loop
    In [114]:
    
    cartesian(([1, 2, 3], [4, 5], [6, 7]))
    
    Out[114]:
    array([[1, 4, 6],
           [1, 4, 7],
           [1, 5, 6],
           [1, 5, 7],
           [2, 4, 6],
           [2, 4, 7],
           [2, 5, 6],
           [2, 5, 7],
           [3, 4, 6],
           [3, 4, 7],
           [3, 5, 6],
           [3, 5, 7]])
    

    numpy.meshgrid() use to be 2D only, now it is capable of ND. In this case, 3D:

    In [115]:
    
    %timeit np.array(np.meshgrid([1, 2, 3], [4, 5], [6, 7])).T.reshape(-1,3)
    10000 loops, best of 3: 74.1 µs per loop
    In [116]:
    
    np.array(np.meshgrid([1, 2, 3], [4, 5], [6, 7])).T.reshape(-1,3)
    
    Out[116]:
    array([[1, 4, 6],
           [1, 5, 6],
           [2, 4, 6],
           [2, 5, 6],
           [3, 4, 6],
           [3, 5, 6],
           [1, 4, 7],
           [1, 5, 7],
           [2, 4, 7],
           [2, 5, 7],
           [3, 4, 7],
           [3, 5, 7]])
    

    Note that the order of the final resultant is slightly different.

提交回复
热议问题