2016-10-13 9 views
5

私はnumpyを使用して2番目の軸でビンしたい大きな2次元配列arrを持っています。 np.histogramは配列を平坦化するので、私は現在、forループを使用しています:numpyで1つの軸に沿ったデータのビニング

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

関連する問題