Как я могу определить оператор: range для моего собственного составного типа в 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

person user3587051    schedule 18.09.2014    source источник
comment
Подумайте о том, чтобы принять ответ Толи.   -  person jub0bs    schedule 27.12.2014


Ответы (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).

person tholy    schedule 19.09.2014