es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Julia: recorrer las filas de la matriz (o no)

Digamos que tengo un vector de cadenas como este

julia> R = ["ABC","DEF"]
2-element Vector{String}:
"ABC"
"DEF"

Ahora duplico los elementos para formar una matriz de 2*2:

julia> x = [R R]
2×2 Matrix{String}:
"ABC"  "ABC"
"DEF"  "DEF"

Lo que quiero lograr es concatenar las cadenas de cada fila de la matriz. Lo mejor que se me ocurrió fue

julia> [join(x[i,:]) for i in 1:length(x)÷2]
2-element Vector{String}:
"ABCABC"
"DEFDEF"

lo cual da el resultado deseado.

¿Existen soluciones alternativas (sin un ciclo explícito)? Intenté encontrar una sintaxis funcional con broadcasting pero no tuve éxito.

(Otra idea que intenté fue

julia> x = [R,R]
2-element Vector{Vector{String}}:
["ABC", "DEF"]
["ABC", "DEF"]

julia> join.(x)
2-element Vector{String}:
"ABCDEF"
"ABCDEF"

lo cual es “más simple” pero obviamente no da el resultado deseado.)

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Una solución alternativa utilizando broadcasting es:

    join.(Ref(R), x)
    

    Esto crea una referencia al vector R utilizando Ref, que es un tipo que mantiene una referencia a un objeto. Al aplicar broadcasting a join sobre la referencia y la matriz x, se concatenan las cadenas de cada fila de x, resultando en:

    2-element Vector{String}:
    "ABCABC"
    "DEFDEF"
    

    Otro enfoque es utilizar la función reshape para transformar x en un vector de 4 elementos y luego aplicar join a cada par de elementos:

    join.(reshape(x, 4))
    

    Esto produce el mismo resultado que antes:

    2-element Vector{String}:
    "ABCABC"
    "DEFDEF"
    

Comments are closed.