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

标签 python matlab numpy

我正在使用 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]]])

关于python - 用于多个维度的 numpy linspace 和网格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36008510/

相关文章:

python - Mat不是数字元组openCV 2

Python 特征值计算比我计算机上的 MATLAB 慢得多。为什么?

c++ - 如何通过Matlab Mex编译工具使用C++编译器

python - 根据条件创建列

python - 有没有办法导入一组模块?

python - 如何在 Telegram 上根据文件 ID 发送文件

python - Django - 用户定义的查询集过滤

matlab - 如何在不求助于循环的情况下有效地创建大型随机向量?

python - 如何将x-genericbytedata-octet-stream转换为可读/可管理的某种格式

python - 同时有效地获取 numpy.argmin 和 numpy.amin