Funciona como enumerar para obter índice e valor para matrizes de deslocamento?

8

Se eu tiver uma matriz como esta:

using OffsetArrays

a = OffsetArray(collect(1:5),(11:15))

Eu posso percorrer a matriz com:

for (i,x) in enumerate(a)
    println((i,x))
end

e pegue:

(1, 1)
(2, 2)
(3, 3)
(4, 4)
(5, 5)

Mas eu quero isso:

(11, 1)
(12, 2)
(13, 3)
(14, 4)
(15, 5)

Existe uma maneira de obter o índice real, pois estou usando uma matriz de deslocamento?

Alec
fonte

Respostas:

9

A função pairsrespeita o comportamento de indexação:

julia> using OffsetArrays

julia> a = OffsetArray(collect(1:5),(11:15))

julia> for (i,x) in pairs(a)
         println((i,x))
       end

(11, 1)
(12, 2)
(13, 3)
(14, 4)
(15, 5)

dos documentos:

Base.pairs- Função .

pairs(collection)

Retornar um iterador sobre key => value pares para qualquer coleção que mapeie um conjunto de chaves para um conjunto de valores. Isso inclui matrizes, onde as chaves são os índices da matriz.

pairs(IndexLinear(), A)
pairs(IndexCartesian(), A)
pairs(IndexStyle(A), A)

Um iterador que acessa cada elemento da matriz A, retornando i => x, onde iestá o índice do elemento e x = A[i]. Idêntico a pairs(A), exceto que o estilo do índice pode ser selecionado. Também semelhante a enumerate(A), exceto iserá um índice válido para A, enquantoenumerate sempre conta de 1, independentemente dos índices de A.

A especificação IndexLinear()garante que iserá um número inteiro; especificar IndexCartesian()garante que iserá um CartesianIndex; especificandoIndexStyle(A) escolhe o que foi definido como o estilo de indexação nativo para a matriz A.

A mutação dos limites da matriz subjacente invalidará esse iterador.

longemen3000
fonte