2014-09-18 34 views
1

我有以下類型定義:如何在Julia中爲我自己的複合類型定義「:」範圍運算符?

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

,並想以允許以下內容:如果我們有T :: TransitionMatrix,我想的範圍內的功能(即,P [:,1], P [:,3]等)在TA上工作我怎樣才能做到這一點?我已經做了類似的事情來定義如下所示的轉換矩陣的「大小」,但我不知道如何讓冒號操作符能夠按照我想要的方式運行。謝謝!

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

考慮接受tholy的回答。 – Jubobs 2014-12-27 17:43:17

回答

5

你想要寫的getindexsize版本,您可以TransitionMatrix。例如:

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)

相關問題