2016-12-11 1 views
0

우선, 나는 scipy을 처음 사용합니다. 아마 신참 질문 일 겁니다. 나는 주어진, 다음 함수를 계산하기 위해 별도의 입력을 scipy.discrete.expect를 사용하는 방법을하지 확신 : 나는 표준 함수를 사용하는 방법을 알기도 전에 1,2,3scipy.stats.discrete.expect를 사용하여 이산 예상 값을 계산하는 방법은 무엇입니까?

m = lambda k: (0.12*np.sin((2*np.pi*k)/3 + np.pi/2))**2 
k = 1,2,3 

지금, 나는 작은 기능에게 자신을 썼다.

input_k = [np.array([1]),np.array([2]),np.array([3])] 

def discrete_expect_mk(input_k): 
    temp_k = [] 
    for i in input_k: 
     temp_k.append(m(i)) 
    return np.array([np.mean(temp_k)]) 

    discrete_expect_mk(input_k) 

감사합니다.

답변

2

, 당신은, 당신이

uniform_dist = scipy.stats.rv_discrete(values=(k, np.ones(k)/len(k))) 
result = uniform_dist.expect(m) 
+0

고맙습니다. 에릭. 너는 남자 야. 이게 내가 원하는거야! –

+0

@ W.S .: 비 순차 k에 대해이 작업을 수행하는 방법은 내 업데이트를 참조하십시오. – Eric

1

이 경우 for 루프를 필요가 없습니다

import numpy as np 
m = lambda k: (0.12*np.sin((2*np.pi*k)/3 + np.pi/2))**2 
k=np.arange(1,4) # k = array([1, 2, 3]) 
print (m(k)) 
# array([ 0.0036, 0.0036, 0.0144]) 
print (np.mean(m(k))) 
# 0.0072 

당신은 그들이 1.

from scipy import stats 
pk = m(k) 
pk /= np.sum(m(k)) # making sure they add up to 1 
func = stats.rv_discrete(name='custm', values=(k, pk)) 
func.expect() 
# 2.5 
을 추가, 즉 확인 m(k) 's이 (가), 확률의 확인 scipy.stats.rv_discrete를 사용하려면

rv_discrete을 사용하고 모든 m의 확률이 같은 경우 다음을 사용할 수 있습니다.

귀하의 경우 2,933,210
+0

진정한 사용할 수 있습니다 알파벳 k와 다항 임의의 균일의 더 일반적인 경우 scipy.stats.randint(low=1, high=4).expect(m)

를 사용할 수 있습니다. 의견을 보내 주셔서 감사합니다. 표준 scipy.discrete.expect 메서드를 사용하여 함수를 직접 작성하는 대신 예상 값을 계산하는 방법을 알고 싶습니다. –

+0

@ W.S .:'scipy.stats.rv_discrete.expect' 함수를 의미합니까? – Mahdi

+0

예. 예를 들면. 또는 어떤 것도 배포판이있는 scipy.stats에 속합니다. 즉, scipy.distribution을 사용하여 연속적인 정수를 생성하기 위해 어떤 이산 분포를 사용해야합니까? –

관련 문제