2012-07-04 9 views
1

을 사용하는 통계 모델의 단위 통계 모델의 경우 일관되게 측정 단위를 사용하려면 내가 가지고있는 데이터의 수를 인코딩해야합니다.측정 단위 및 F #

type DataSet<[<Measure>] 'x, [<Measure>] 'y, [<Measure>] 'n> = 
     DataSet of Matrixu<'n,'x> * Vectoru<'n,'y> 

나는 다음 두 데이터 집합

static member (+) (a:DataSet<'x,'y,'n1>,b:DataSet<'x,'y,'n2>):DataSet<'x,'y,n> = ... 

에게 병합 함수를 정의 할 수 있습니다하지만 다른 크기의 데이터 세트의 unknonw 수를 병합 할 수 있어야합니다. 어떻게 그러한 함수를 정의합니까?

시퀀스가 ​​1 종류 만 있기 때문에 순진한 방법이 실패하므로 크기를 정적으로 정의해야합니다.

static member merge (ar:DataSet<'x,'y, ??? > seq) : DataSet<'x,'y, 'n> = 
     if seq.empty, etc... 
     let head = ar |> Seq.head 
     let others = ar |> Seq.skip 1 
     others |> Seq.fold (fun st el -> st + el) head 

아니면 그냥 특정 규칙을 추가하고 데이터 크기를 관리하지 않아야합니다. 즉, 응용 프로그램 코드에 커스텀 차원 관리를 추가하는 것은 더러운 것입니다. 그리고 처음에는 깨끗한 차원을 갖는 점이 폐허가되었습니다!

+2

조치 'n'은 여기서 어떤 역할을합니까? 데이터의 수입니까? 그것은 나에게 측정 단위처럼 들리지 않습니다. 다른 질문 :'정적 멤버 (+)'에서''n1'과''n2'와 관련된 리턴 타입에서'n'은 어떻게됩니까? – Joh

+0

실제로 n은 데이터의 수입니다. 행렬의 '타입'을 묘사하는 행렬 n을 m으로 나타냅니다 ... – nicolas

+0

+ 정적, 우리는 n = n1 + n2를 가질 것입니다 (자연수와 bijection의 유형 사이의 일부 연산의 경우). 그것은 집행 가능하다고 생각합니다, 그래서 저는이 차원을 자유롭게했습니다. – nicolas

답변

1

측정 단위 사용법이 늘어나는 것 같습니다. 내 경험상 그들은 물리학 및 이와 유사한 분야 (금융, 아마도 그렇듯)에서 훌륭하게 작동하지만 그게 전부입니다. 정적 컨테이너 (예 : n 행 m 행렬)의 크기를 처리 할 수 ​​있다고는 생각하지 않습니다.

종속 유형 시스템 및 F*에 대해 들어 봤습니까? 작업에 적합한 고정 크기 목록을 가진 예제를 보았습니다. 아직 Microsoft의 연구 프로젝트이므로 상업적 용도로 적합하지 않을 수 있습니다.