2017-08-14 42 views
1

我在N維中有一組M點,其中每個點都有一個關聯的「權重」值(基本上是一組浮點數爲M) 。使用numpyhistogramdd()我可以生成該集的N維直方圖。N維直方圖包含在每個垃圾桶中的權重的最大值

如果我使用histogramdd()weights參數,我回來:

屬於落入每個倉的樣本權重的總和。

下面的代碼顯示熱來創建這些陣列:

import numpy as np 

# N-dimensional M points. 
N_dim, M = 3, 1000 
points = np.random.uniform(0., 1., size=(M, N_dim)) 

# Weight for each point 
weights = np.random.uniform(0., 1., M) 

# N-dimensional histogram. 
histo = np.histogramdd(points)[0] 
# Histogram containing the sum of the weights in each bin. 
weights_histo = np.histogramdd(points, weights=weights)[0] 

取而代之,我需要創建N維直方圖points,其中存儲在每個倉中的值是最大體重值中的所有權重與落入該倉內的點相關聯。

即:我需要只存儲在每個bin中的最大權重,而不是所有權重的總和。

我該怎麼做?

+0

Python版本? –

+0

2.7,但我也會爲3.x做出回答。 – Gabriel

+0

我拒絕了你的編輯@LiamHealy,因爲我特別說我在Python版本中打開了一個答案。 – Gabriel

回答

1

scipy.stats中有幾個binned_statistic函數。 'max'是默認統計之一,但您也可以使用任何可調用的統計信息。

import numpy as np 
from scipy.stats import binned_statistic_dd 

# N-dimensional M points. 
N_dim, M = 3, 1000 
points = np.random.uniform(0., 1., size=(M, N_dim)) 

# Weight for each point 
weights = np.random.uniform(0., 1., M) 

weights_histo, bin_edges, bin_indices = binned_statistic_dd(points, 
                  weights, 
                  statistic=np.max, 
                  bins=5) 

print weights_histo.shape # (5,5,5) 
+0

我沒有意識到'scipy.stats'函數,這很方便。非常感謝你! – Gabriel