Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 多维度的numpy linspace和网格栅格_Python_Matlab_Numpy - Fatal编程技术网

Python 多维度的numpy linspace和网格栅格

Python 多维度的numpy linspace和网格栅格,python,matlab,numpy,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.meshg

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

但是,我以前不知道输入的维数,因此是否可以重写此表达式,以便它可以生成任意维数的网格?

您可以使用循环理解生成所有1D数组,然后在所有具有内部操作的
*
运算符的数组上使用,这相当于,像这样-

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

1) 2D案例:

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

您可以使用循环理解来生成所有1D数组,然后在所有具有
*
运算符的数组上使用,这相当于-

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

1) 2D案例:

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

你试过添加一个coma和另一个linspace吗?是的,但问题是维度在“编译时”是未知的。。。它必须基于输入GridSize向量的维度生成。您的MATLAB代码对这两个维度使用相同的大小,而numpy代码不是。目的是什么?它不使用相同的大小,即使Matlab代码不使用。@Luca如果不知道它们,请使用If语句。。。。。另外,在matlab中,任何矩阵的维数都是无穷大的,大小为1,因此您可以只添加一个具有单个点的alinspace。您是否尝试添加一个coma和另一个linspace?是的,但问题是这些维数在“编译时”是未知的。。。它必须基于输入GridSize向量的维度生成。您的MATLAB代码对这两个维度使用相同的大小,而numpy代码不是。目的是什么?它不使用相同的大小,即使Matlab代码不使用。@Luca如果不知道它们,请使用If语句。。。。。此外,在matlab中,任何矩阵都有无限维,大小为1,因此您可以只添加一个带单点的alinspace。这就成功了。我试图使用列表理解,但错过了
*
操作符,无法理解我的错误。谢谢@卢卡不用担心,很乐意帮忙!这就成功了。我试图使用列表理解,但错过了
*
操作符,无法理解我的错误。谢谢@卢卡不用担心,很乐意帮忙!