¿Funciona como enumerar para obtener índice y valor para matrices de desplazamiento?

8

Si tengo una matriz como esta:

using OffsetArrays

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

Puedo iterar a través de la matriz con:

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

y obten:

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

Pero quiero esto:

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

¿Hay alguna manera de obtener el índice real ya que estoy usando una matriz de desplazamiento?

Alec
fuente

Respuestas:

9

La función pairsrespeta el comportamiento de indexación:

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)

de los documentos:

Base.pairs- Función .

pairs(collection)

Devuelve un iterador sobre key => valuepares para cualquier colección que asigne un conjunto de claves a un conjunto de valores. Esto incluye matrices, donde las claves son los índices de la matriz.

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

Un iterador que accede a cada elemento de la matriz A, regresando i => x, donde iestá el índice para el elemento y x = A[i]. Idéntico a pairs(A), excepto que se puede seleccionar el estilo de índice. También es similar a enumerate(A), excepto ique será un índice válido para A, mientras que enumeratesiempre cuenta desde 1 independientemente de los índices de A.

Especificar IndexLinear()asegura que iserá un número entero; especificando IndexCartesian()asegura que iserá un CartesianIndex; especificando IndexStyle(A)elige lo que se haya definido como el estilo de indexación nativo para la matriz A.

La mutación de los límites de la matriz subyacente invalidará este iterador.

longemen3000
fuente