我想生成一个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接受切片
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)
| 归档时间: |
|
| 查看次数: |
3651 次 |
| 最近记录: |