Как определить оператор диапазона ":" для моего собственного составного типа в Julia?
У меня есть следующее определение типа:
type TransitionMatrix
A :: SparseMatrixCSC{Float64,Int64}
d :: Array{Float64,1}
I :: Array{Int64}
end
и хотел бы учесть следующее: если бы у нас был T:: TransitionMatrix, я бы хотел, чтобы функционал диапазона (IE, P[:, 1], P[:, 3] и т. д.) для его работы работал бы для Т.А. Как я могу это сделать? Я сделал аналогичные вещи, чтобы определить "размер" матрицы перехода, как показано ниже, но я не знаю, как позволить оператору двоеточия функционировать так, как мне бы хотелось. Спасибо!
function Base.size(T :: TransitionMatrix, dim)
return size(T.A, dim)
end
1 ответ
Вы хотите написать версии 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)
,