2014-09-18 1 views
1

나는 다음과 같은 유형 정의가 :Julia에서 내 자신의 화합물 유형에 대해 ":"범위 연산자를 어떻게 정의 할 수 있습니까?

type TransitionMatrix 
    A :: SparseMatrixCSC{Float64,Int64} 
    d :: Array{Float64,1} 
    I :: Array{Int64} 
end 

및 수 있도록하고자 다음 : 우리는 T :: TransitionMatrix이있는 경우, 내가 (IE, P를 범위의 기능을하고 싶습니다 [:, 1, P [:, 3] 등)이 TA에서 작업 할 수 있습니다. 어떻게해야합니까? 나는 아래와 같이 전이 행렬의 "크기"를 정의하기 위해 비슷한 일을했지만 콜론 연산자가 어떻게 기능 할 수있게 허용 할 수 있는지 알지 못합니다. 고맙습니다!

function Base.size(T :: TransitionMatrix, dim) 
    return size(T.A, dim) 
end 
+0

tholy의 대답을 수락하는 것을 고려하십시오. – Jubobs

답변

5

당신은 당신의 TransitionMatrix에 대한 getindexsize의 버전을 기록 할 수 있습니다. 예를 들어 :

import Base: getindex, size 
getindex(A::TransitionMatrix, indx1, indx2) = @show (indx1, indx2) 
size(A::TransitionMatrix) = size(A.A) 
size(A::TransitionMatrix, d::Integer) = size(A.A,d) 

그런 다음

julia> A[:,2:3] 
(indx1,indx2) = (1:5,2:3) 
(1:5,2:3) 

파서는 1:size(A,d): 확장합니다.

관련 문제