我有一个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]])
谢谢,
使用*
参数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.]])