2015-12-10 90 views
0

我有一個代表函數採樣點的N維數組。然後我使用numpy的histogramdd創建多維直方圖:在Python中生成多維網格

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的輸入數組,而不是數組列表的方式......但我要假設邊緣數量未知,請使用生成器。

任何提示?

--- UPDATE --- 這裏是我想要什麼,我的意思是 「不工作」

>>>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]]) 

謝謝

+0

你是什麼意思它不工作? – Tempux

+0

我的意思是我沒有預期的網格,我可以得到如果我輸入數組而不是數組列表。我會用一個例子來更新我的答案。 –

回答

2

使用* argument 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.]]) 
+0

它非常完美,非常感謝! –