如何定义":" Julia中我自己的复合类型的范围运算符?

时间:2014-09-18 21:42:39

标签: matrix range julia colon

我有以下类型定义:

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

1 个答案:

答案 0 :(得分:5)

您希望为getindex撰写sizeTransitionMatrix的版本。例如:

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)

相关问题