2016-03-21 3 views
1

結果:は、次のコード内の変数<code>values1</code>と<code>values2</code>を関係式が何であるかを

values1, _ = pylab.histogram(data, bins, density = False) 

values2, _ = pylab.histogram(data, bins, density = True) 

values1どうすればvalues2を得ることができますか?pylab.histogramへの別の呼び出しを回避できますか?

おかげ

+1

混乱を避けるため、 'pylab.histogram'は' matplotlib'ではなく 'numpy'ヒストグラム関数であることに注意してください。 – tom

答えて

2

一次元密度values/lengthとして定義されます。しかし、ヒストグラムの正規化方法でもあります。

だから合計数(正規化)とビン幅(密度)で割るdensity - 値へのあなたの元の値から得るために:

bin_width = bins[1:] - bins[:-1] 
values2 = values1/np.sum(values1)/bin_width 

ランダムな配列を持つ簡単なテスト:

from matplotlib import pylab 
import numpy as np 
data = np.random.randint(0,10, 1000) 
bins = np.array([0,1,2,5,11]) 
values1, _ = pylab.histogram(data, bins, density = False) 
print(values1) 
# [ 97, 117, 278, 508] 
values2, _ = pylab.histogram(data, bins, density = True) 
print(values2) 
# [ 0.097, 0.117, 0.09266667, 0.08466667] 
bin_width = bins[1:] - bins[:-1] 
print(values1/np.sum(values1)/bin_width) 
# [ 0.097, 0.117, 0.09266667, 0.08466667] 

したがって、この場合も同じです。

+0

私はあなたがPython 3.xでテストしたと仮定します...私はPython 2.7.11で、コードの最後の行でこれをしなければなりませんでした: 'print values1 /(1.0 * np.sum(values1))/ bin_width' – mljrg

+0

@mljrg - 私はpython3を使用しています。あなたはそれに 'python 2.x'というタグをつけていないので、私はどのpythonバージョンの解決策もOKであると仮定しました。 'from __future__ import division、print_function'を使って、動作の違いをバイパスすることもできます。 :) – MSeifert

関連する問題