当前位置:  开发笔记 > 编程语言 > 正文

用Python生成多维网格

如何解决《用Python生成多维网格》经验,为你挑选了1个好方法。

我有一个N维的点数组,代表一个函数的采样。然后,我使用numpy histogramdd创建多维直方图:

histoComp,edges = np.histogramdd(pointsFunction,bins =  [np.unique(pointsFunction[:,i]) for i in range(dim)])

接下来,我尝试使用每个仓位的不同点的坐标生成一个“网格”。为此,我正在使用:

Grid = np.vstack(np.meshgrid([edges[i] for i in range(len(edges))])).reshape(len(edges),-1).T

但是,这不符合我的预期,因为np.meshgrid的输入是数组列表而不是数组...但是鉴于边缘数未知,我必须使用生成器。

有小费吗 ?

---更新---这是我不工作的意思的一个例子

>>>a = [4, 8, 7, 5, 9]
>>>b = [7, 8, 9, 4, 5]

所以这是我想要的结果:

>>>np.vstack(np.meshgrid(a,b)).reshape(2,-1).T
array([[4, 7],
   [8, 7],
   [7, 7],
   [5, 7],
   [9, 7],
   [4, 8],
   [8, 8],
   [7, 8],
   [5, 8],
   [9, 8],
   [4, 9],
   [8, 9],
   [7, 9],
   [5, 9],
   [9, 9],
   [4, 4],
   [8, 4],
   [7, 4],
   [5, 4],
   [9, 4],
   [4, 5],
   [8, 5],
   [7, 5],
   [5, 5],
   [9, 5]])

但这是我得到的结果:

>>> np.vstack(np.meshgrid([a,b])).reshape(2,-1).T
array([[4, 7],
   [8, 8],
   [7, 9],
   [5, 4],
   [9, 5]])

谢谢,



1> unutbu..:

使用*参数unpacking operator:

np.meshgrid(*[A, B, C])

相当于

np.meshgrid(A, B, C)

既然edges是列表,请np.meshgrid(*edges)解压缩其中的项目edges并将其作为参数传递给np.meshgrid

例如,

import numpy as np

x = np.array([0, 0, 1])
y = np.array([0, 0, 1])
z = np.array([0, 0, 3])
xedges = np.linspace(0, 4, 3)
yedges = np.linspace(0, 4, 3)
zedges = np.linspace(0, 4, 3)
xyz = np.vstack((x, y, z)).T
hist, edges = np.histogramdd(xyz, (xedges, yedges, zedges))
grid = np.vstack(np.meshgrid(*edges)).reshape(len(edges), -1).T

产量

In [153]: grid
Out[153]: 
array([[ 0.,  0.,  0.],
       [ 0.,  0.,  2.],
       [ 0.,  0.,  4.],
       ...
       [ 2.,  4.,  4.],
       [ 4.,  4.,  0.],
       [ 4.,  4.,  2.],
       [ 4.,  4.,  4.]])

推荐阅读
mobiledu2402851377
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有