2016-10-13 80 views
5

我有一個大的二維數組arr,我想用numpy在第二個軸上進行分組。由於np.histogram平展陣列我目前使用的for循環:在numpy中沿着一個軸的數據分組

import numpy as np 

arr = np.random.randn(100, 100) 

nbins = 10 
binned = np.empty((arr.shape[0], nbins)) 

for i in range(arr.shape[0]): 
    binned[i,:] = np.histogram(arr[i,:], bins=nbins)[0] 

我覺得應該是這樣做numpy的內更直接,更有效的方式,但我沒能找到一個。

回答

4

你可以使用np.apply_along_axis

x = np.array([range(20), range(1, 21), range(2, 22)]) 

nbins = 2 
>>> np.apply_along_axis(lambda a: np.histogram(a, bins=nbins)[0], 1, x) 
array([[10, 10], 
     [10, 10], 
     [10, 10]]) 

主要優勢(如果有的話)是它的略短,但我不會指望多大的性能增益。在每行結果的彙編中它可能稍微更有效率。

-3

你必須使用專門numpy.histogramdd意味着您的問題

+1

我不完全得到怎樣。我的理解是,'histogramdd'是爲創建多維直方圖而創建的,但我想獲得幾個一維直方圖。 – obachtos