我有以下类型定义:
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 :(得分:5)
您希望为getindex
撰写size
和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)
。