9

Numpy のランダム指数分布を使用して、乱数の配列を作成しようとしています。私はこれで問題なく動作していますが、私のプロジェクトには 1 つの追加の要件があり、それは特定の値を持つ配列要素の数を正確に指定する機能です。

説明させてください (コードは以下にありますが、ここで説明します): ランダムな指数分布を生成し、データのヒストグラムをプロットして、素敵な指数曲線を作成します。私が本当にできるようにしたいのは、変数を使用してこの曲線の y 切片 (曲線が y 軸と交わる点) を指定することです。ヒストグラムのビンの数を変更することで基本的な方法でこれを実現できますが、これはプロットのみを変更し、元のデータは変更しません。

ここにコードの骨を挿入しました。いくつかのコンテキストを与えるために、私は銀河の指数円盤を作成しようとしています。したがって、生成したいランダム配列は半径の配列であり、指定できるようにしたい変数は銀河の中心の数密度です:

import numpy as N
import matplotlib.pyplot as P

n = 1000    
scale_radius = 2
central_surface_density = 100 #I would like this to be the controlling variable, even if it's specification had knock on effects on n.

radius_array = N.random.exponential(scale_radius,(n,1))     

P.figure()    
nbins = 100
number_density, radii = N.histogram(radius_array, bins=nbins,normed=False)
P.plot(radii[0:-1], number_density)
P.xlabel('$R$')
P.ylabel(r'$\Sigma$')
P.ylim(0, central_surface_density)
P.legend()      
P.show()

このコードは、次のヒストグラムを作成します。

ここに画像の説明を入力

要約すると、ヒストグラムのプロット方法を変更するのではなく、データの生成方法を制御することで、このプロットが y 軸を横切る場所を指定できるようにしたいと考えています。

さらに明確にするためのヘルプやリクエストは大歓迎です。

4

1 に答える 1

12

のドキュメントによるとnumpy.random.exponential、入力パラメータ beta は、wikipedia で説明されている指数の定義では 1/lambda です。

必要なのは、 で評価されるこの関数ですf(x=0)=lambda=1/beta。したがって、正規分布では、y 切片は numpy 関数の逆数になるはずです。

import numpy as np
import pylab as plt

target = 250
beta = 1.0/target

Y = np.random.exponential(beta, 5000)
plt.hist(Y, normed=True, bins=200,lw=0,alpha=.8)
plt.plot([0,max(Y)],[target,target],'r--')
plt.ylim(0,target*1.1)
plt.show()

ここに画像の説明を入力

はい、ヒストグラムの y 切片は異なるビン サイズで変化しますが、これは何の意味もありません。ここで合理的に話すことができる唯一のことは、基礎となる確率分布です(したがって、normed=true

于 2013-02-26T15:00:27.190 に答える