多维度的numpy linspace和网格网格

2024-05-19 20:27:36 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

^{pr2}$

但是,我以前不知道输入的尺寸,所以是否可以重写这个表达式,以便它可以生成任意维数的网格?在


Tags: 数据代码命令numpy表达式尺寸向量matlab
1条回答
网友
1楼 · 发布于 2024-05-19 20:27:36

您可以使用循环理解来生成所有的1D数组,然后对所有具有*运算符的那些数组使用^{},该运算符在内部执行^{},这相当于^{},如下-

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

样本运行

1)二维盒:

^{pr2}$

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]]])

相关问题 更多 >