如何在python中生成n维网格

itz*_*bat 5 python numpy

我想生成一个n维网格。

对于 3D 网格,我有以下工作代码(它在 (-1,1 ) 之间创建 5X5X5 的网格

import numpy as np
subdivision = 5
step = 1.0/subdivision
grid= np.mgrid[ step-1 : 1.0-step: complex(0, subdivision),
                step-1 : 1.0-step: complex(0, subdivision),
                step-1 : 1.0-step: complex(0, subdivision)]
Run Code Online (Sandbox Code Playgroud)

我想将其推广到 n 维,所以像

grid = np.mgrid[step-1 : 1.0-step: complex(0,subdivision) for i in range(n)]
Run Code Online (Sandbox Code Playgroud)

但这显然行不通。我也尝试过

temp = [np.linspace(step-1 , 1.0-step, subdivision) for i in range(D)]
grid = np.mgrid[temp]
Run Code Online (Sandbox Code Playgroud)

但这也不起作用,因为np.mgrid接受切片

kaz*_*ase 5

complex您可以使用实数显式定义步长,而不是使用。在我看来,这更简洁:

grid= np.mgrid[ step-1 : 1.0: step * 2,
                step-1 : 1.0: step * 2,
                step-1 : 1.0: step * 2]
Run Code Online (Sandbox Code Playgroud)

剖析上面的代码片段,我们看到step-1 : 1.0: step * 2定义了一个切片,并通过,创建一个由三个切片组成的元组来分隔它们,该元组被传递给np.mgrid.__getitem__.

我们可以n通过构造切片元组将其推广到维度n

n = 3
grid= np.mgrid[tuple(slice(step - 1, 1, step * 2) for _ in range(n))]
Run Code Online (Sandbox Code Playgroud)