conditionals - transposición matricial en clojure
clojure conditionals (2)
A partir de 2014, recomendaría utilizar core.matrix para cualquier trabajo numérico en Clojure.
Entre otras cosas, esto proporciona implementaciones de todas las operaciones de matriz más comunes:
(use ''clojure.core.matrix)
(transpose [[1 2] [3 4]])
=> [[1 3] [2 4]]
Para evitar una posible representación de una matriz es un vector de vectores, es decir, [[1 2] [3 4]]
. Una posible implementación de la transposición de una matriz sería:
(defn transpose [matrix]
(loop [matrix matrix, transp [], i 0]
(if (< i (count (nth matrix 0)))
(recur matrix
(conj transp
(vec (reduce concat
(map #(conj [] (nth %1 i))
matrix))))
(inc i))
transp)))
¿Alguien puede pensar en una implementación más idiomática para ocultar? por ejemplo, para evitar que este bucle horrible se repita?
La solucion habitual es
(defn transpose [m]
(apply mapv vector m))