2013-02-26 2 views
4

Numpy의 임의 지수 분포를 사용하여 난수 배열을 만들려고합니다. 이 잘 작동하고있어,하지만 내 프로젝트에 대한 하나의 추가 요구 사항이 있고 그 정확히 얼마나 많은 배열 요소를 특정 값을 지정할 수있는 기능입니다.Python에서 numpy.random.exponential 분포 조작

설명해 드리겠습니다. (코드는 아래에 있지만 설명은 여기에 설명되어 있습니다.) : 나는 임의의 지수 분포를 생성하고 데이터의 히스토그램을 그려 좋은 지수 곡선을 만듭니다. 내가 정말로하고 싶은 것은 변수를 사용하여이 곡선의 y 절편 (곡선이 y 축과 만나는 지점)을 지정하는 것입니다. 히스토그램의 빈 수를 변경하여 기본 방식으로이 작업을 수행 할 수 있지만이 작업은 원래 데이터가 아니라 플롯 만 변경합니다.

여기에 내 코드의 뼈대를 삽입했습니다. 어떤 맥락에서 나는 은하계의 지수 원반을 만들려고합니다. 그래서 생성하고자하는 무작위 배열은 반지름의 배열이고, 지정할 수 있어야하는 변수는 은하계의 중심에있는 숫자 밀도입니다 :

enter image description here 그래서

가이 음모 나 '방식을 제어하여 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() 

이 코드는 다음과 히스토그램을 생성 히스토그램이 어떻게 그려 졌는지를 변경하지 않고 데이터를 생성했습니다.

더 자세한 설명이 필요하면 도움을 받으십시오.

답변

7

numpy.random.exponential에 대한 문서에 따르면, 입력 매개 변수 beta는 exponential described in wikipedia의 정의에 대해 1/λ입니다.

원하는 기능은 f(x=0)=lambda=1/beta입니다. 따라서 NORMED 배포, 당신의 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() 

enter image description here

이 예 히스토그램의 y 절편이 다른 빈 크기에 따라 변화하지만, 이것은 아무 의미도 없습니다. 여기서 합리적으로 말할 수있는 것은 확률 분포입니다 (따라서 normed=true)

+0

그게 내가 필요한 것입니다. 고맙습니다. – user2111574

+0

normed = true가 무엇인지 모르는 경우 여기를 확인하십시오. https://docs.scipy.org/doc/numpy/reference/generated/numpy.histogram.htm 기본적으로 " 범위에서의 적분이 1 "이되도록 정규화 된 빈에서 확률 밀도 함수 –