1

numpy.histogram(data, bins) は、データ配列の要素が配列 bins によって定義されたビンにいくつ含まれるかを計算する非常に高速で効率的な方法です。次の問題を解決する同等の関数はありますか? R 行× C 列の行列があります。bins で指定された定義を使用して、マトリックスの各行をビンに入れたいと思います。結果は、R 行を持ち、列数がビンの数に等しい別の行列になるはずです。

入力として行列を与える関数 numpy.histogram(data, bins) を使用しようとしましたが、行列が R*C 要素の配列として扱われることがわかりました。次に、結果は Nbins 要素の配列になります。

4

3 に答える 3

2

これを多くの行を持つ配列に適​​用している場合、この関数は一時メモリを犠牲にして速度を向上させます。

def hist_per_row(data, bins):

    data = np.asarray(data)

    assert np.all(bins[:-1] <= bins[1:])
    r, c = data.shape
    idx = bins.searchsorted(data)
    step = len(bins) + 1
    last = step * r
    idx += np.arange(0, last, step).reshape((r, 1))
    res = np.bincount(idx.ravel(), minlength=last)
    res = res.reshape((r, step))
    return res[:, 1:-1]

最後のres[:, 1:-1]行の は、 len の配列を返す numpy.histogram と一致させる必要がありますが、それぞれlen(bins) - 1より小さい値と大きい値をカウントしたい場合は、それを削除できます。bins[0]bins[-1]

于 2014-01-28T02:06:12.657 に答える
0

これらの線に沿って何か?

import numpy as np
data = np.random.rand(10,20)
print np.apply_along_axis(lambda x: np.histogram(x)[0], 1, data)
于 2014-01-28T00:35:17.740 に答える