2012-04-05 5 views
0

에 FoldList에 의해 생성 된 테이블에서 번호의 마지막 열을 선택하는 방법. 나는 10 000 번 13 숫자 (시작 숫자 인 12 숫자 + 1)를 생성하는이 표를 가지고 있습니다. 10 000 개의 13 번째 숫자로 히스토그램을 만들어야합니다. 나는 설명하기가 아주 분명하고 아주 까다 롭기를 바랍니다. 내가 티카 새로운 오전과 내가 한 가지로 어려움을 겪고입니다 티카

은 테이블 :

F = Table[(Xi = RandomVariate[NormalDistribution[], 12]; 
Mu = -0.00644131; 
Sigma = 0.0562005; 
t = 1/12; s = 0.6416; 
FoldList[(#1*Exp[(Mu - Sigma^2/2)*t + Sigma*Sqrt[t]*#2]) &, s, 
Xi]), {SeedRandom[2]; 10000}] 

한 테이블에 모두 13 숫자를 취할 것입니다 테이블이 될 수있는 다음의 히스토그램에 대한 결과 -이 히스토그램을 생성하는 것은 매우 쉬운 것보다. 어쩌면 "선택"? 아니면 이것을 해결할 다른 방법을 아십니까?

+1

이 당신이 원하는 무엇인가? – mohit6up

+0

Thx 많이 - 저는 K = F [[All, 13]]를 찾을 수있었습니다. 그러나 이것은 훨씬 나아졌습니다. – seniorita

+0

'F [[All, -1]]'도 작동합니다. – Heike

답변

2

당신은 Part를 사용하여 목록의 다른 부분에 액세스하거나보다 전문적인 명령의 일부와 같은 First, Rest, Most와 (당신이 필요로하는 일) Last를 (당신이 필요 부품에 따라) 할 수 있습니다. 덧글에 언급 된 바와 같이 Histogram[Last/@F] 또는 Histogram[F[[All,-1]]]이 정상적으로 작동합니다. 이 질문의 일부가 아니었지만

, 나는 엄청나게 그것을 속도가 빨라집니다 당신이 특정 문제에 대해 할 수있는 몇 가지를주의하고 싶습니다. 그들은 Table 명령 안에 있기 때문에 당신은 Mu, Sigma 등 1 만 시간을 정의한다. 당신은 또한 당신이 Table 내부의 FoldList 내부에 그것을 가지고 있기 때문에, 일정한 경우에도, Mu - Sigma^2/2)*t + Sigma*Sqrt[t] 12 만 시간을 다시 계산한다. 내 컴퓨터에

:이 대안은

F = Table[(Xi = RandomVariate[NormalDistribution[], 12]; 
    Mu = -0.00644131; 
    Sigma = 0.0562005; 
    t = 1/12; s = 0.6416; 
    FoldList[(#1*Exp[(Mu - Sigma^2/2)*t + Sigma*Sqrt[t]*#2]) &, s, 
     Xi]), {SeedRandom[2]; 10000}]; // Timing 

{4.19049, Null} 

입니다

열 배 빠른 다음 Table 내에서 재정의 다른있는 것들에 대한

F = Module[{Xi, beta}, With[{Mu = -0.00644131, Sigma = 0.0562005, 
     t = 1/12, s = 0.6416}, 
    beta = (Mu - Sigma^2/2)*t + Sigma*Sqrt[t]; 
    Table[(Xi = RandomVariate[NormalDistribution[], 12]; 
     FoldList[(#1*Exp[beta*#2]) &, s, Xi]), {SeedRandom[2]; 
     10000}] ]]; // Timing 

{0.403365, Null} 
나는 지역 상수에 대한 With 사용

Module (Xi) 또는 로컬 상수 (beta)를 기반으로 한 계산입니다. This question on the Mathematica StackExchangeWithBlockModule를 사용할 때 설명하는 데 도움이됩니다. (Mathematica StackExchange를 더 자세히 살펴 보는 것이 좋습니다. Mathematica 전문가의 대부분이 지금 매달려 있습니다.)

Part의 사용은 실제로 필요하지 않습니다. FoldList을 사용하는 대신 Fold을 사용하면됩니다. 접는 부분의 마지막 숫자는 FoldList의 마지막 숫자와 동일합니다. 그래서 당신은 시도 할 수 :

이 방법으로 FF 계산
FF = Module[{Xi, beta}, With[{Mu = -0.00644131, Sigma = 0.0562005, 
     t = 1/12, s = 0.6416}, 
    beta = (Mu - Sigma^2/2)*t + Sigma*Sqrt[t]; 
    Table[(Xi = RandomVariate[NormalDistribution[], 12]; 
     Fold[(#1*Exp[beta*#2]) &, s, Xi]), {SeedRandom[2]; 
     10000}] ]]; 

Histogram[FF] 

도 이전 버전보다 약간 빠릅니다. 내 시스템에서 Timing은 0.377 초를보고하지만 0.4 초와의 차이는 걱정할 가치가 거의 없습니다.

enter image description here

당신이 SeedRandom와 씨앗을 설정하고 있기 때문에, 모든 세 가지 코드 예제 정확히 같은 결과를 확인하기 쉽습니다.

0

내 댓글 답변 만들기 :`히스토그램 [마지막/@의 F]`: Histogram[Last /@ F]