Skip to main content
 首页 » 编程设计

python之用于多个维度的 numpy linspace 和网格

2025年05月04日30mq0036

我正在使用 numpy 将一些 matlab 代码移植到 python,我有以下 matlab 命令:

[xgrid,ygrid]=meshgrid(linspace(-0.5,0.5, GridSize-1), ... 
                       linspace(-0.5,0.5, GridSize-1)); 

现在,这在 2D 中很好,但我想将其扩展到 n 维。因此,根据输入数据,GridSize 可以是 2、3 或 4 维向量。所以,在 2D 中,这将是:

[xgrid, grid] = np.meshgrid(np.linspace(-0.5,0.5, GridSize[0]),  
                            np.linspace(-0.5,0.5, GridSize[1])); 

但是,我之前并不知道输入的维数,那么是否可以重写这个表达式,使其可以生成任意维数的网格?

请您参考如下方法:

您可以使用循环理解生成所有一维数组,然后使用 np.meshgrid在所有内部执行 unpacking of argument lists 的 * 运算符上,相当于 MATLAB's comma separated lists , 像这样 -

allG = [np.linspace(-0.5,0.5, G) for G in GridSize] 
out = np.meshgrid(*allG) 

样本运行

1) 二维案例:

In [27]: GridSize = [3,4] 
 
In [28]: allG = [np.linspace(-0.5,0.5, G) for G in GridSize] 
    ...: out = np.meshgrid(*allG) 
    ...:  
 
In [29]: out[0] 
Out[29]:  
array([[-0.5,  0. ,  0.5], 
       [-0.5,  0. ,  0.5], 
       [-0.5,  0. ,  0.5], 
       [-0.5,  0. ,  0.5]]) 
 
In [30]: out[1] 
Out[30]:  
array([[-0.5       , -0.5       , -0.5       ], 
       [-0.16666667, -0.16666667, -0.16666667], 
       [ 0.16666667,  0.16666667,  0.16666667], 
       [ 0.5       ,  0.5       ,  0.5       ]]) 

2) 3D 案例:

In [51]: GridSize = [3,4,2] 
 
In [52]: allG = [np.linspace(-0.5,0.5, G) for G in GridSize] 
    ...: out = np.meshgrid(*allG) 
    ...:  
 
In [53]: out[0] 
Out[53]:  
array([[[-0.5, -0.5], 
        [ 0. ,  0. ], 
        [ 0.5,  0.5]], ... 
 
       [[-0.5, -0.5], 
        [ 0. ,  0. ], 
        [ 0.5,  0.5]]]) 
 
In [54]: out[1] 
Out[54]:  
array([[[-0.5       , -0.5       ], ... 
 
       [[ 0.16666667,  0.16666667], 
        [ 0.16666667,  0.16666667], 
        [ 0.16666667,  0.16666667]], 
 
       [[ 0.5       ,  0.5       ], 
        [ 0.5       ,  0.5       ], 
        [ 0.5       ,  0.5       ]]]) 
 
In [55]: out[2] 
Out[55]:  
array([[[-0.5,  0.5], .... 
 
       [[-0.5,  0.5], 
        [-0.5,  0.5], 
        [-0.5,  0.5]]])