1

我需要为具有一般/可变维数的数组生成网格。在 2D 情况下,我知道我可以使用 mgrid:

一些二维数据

N = 1000
x = np.random.uniform(0., 1., N)
y = np.random.uniform(10., 100., N)
xmin, xmax, ymin, ymax = x.min(), x.max(), y.min(), y.max()

获取二维网格

xy_grid = np.mgrid[xmin:xmax:10j, ymin:ymax:10j]

当维度数量可变时,如何扩展这种方法?即:我的数据可能是(x,y)或(x,y,z)或(x,y,z,q)等。

天真的方法:

Md_data.shape = (M, N),对于 M 维

dmin, dmax = np.amin(Md_data, axis=1), np.amax(Md_data, axis=1)
Md_grid = np.mgrid[dmin:dmax:10j]

不工作

4

1 回答 1

0

meshgrid作为一个函数,我们可以使用 '*' 解包:

In [412]: dmin,dmax=np.array([1,2,3]), np.array([5,6,7])
In [423]: arr = np.linspace(dmin,dmax,5)
In [424]: arr
Out[424]: 
array([[1., 2., 3.],
       [2., 3., 4.],
       [3., 4., 5.],
       [4., 5., 6.],
       [5., 6., 7.]])

我正在使用sparse更紧凑的显示器。

In [425]: atup = np.meshgrid(*arr.T,indexing='ij',sparse=True)
In [426]: atup
Out[426]: 
[array([[[1.]],
 
        [[2.]],
 
        [[3.]],
 
        [[4.]],
 
        [[5.]]]),
 array([[[2.],
         [3.],
         [4.],
         [5.],
         [6.]]]),
 array([[[3., 4., 5., 6., 7.]]])]

ogrid做同样的事情:

np.ogrid[1:5:5j,2:6:5j,3:7:5j]

想一想,原来如此

np.ix_(arr[:,0],arr[:,1],arr[:,2])

虽然它没有nonsparse其他选择。

于 2021-05-21T16:00:07.317 回答