Matrix arithmetic is one of those cases where I feel indexing is
clearer than filter/map functions.

However, if you're representing matrices as vectors as vectors, this
will likely come with a little bit of extra overhead.

That's not a problem usually because if you plan on doing any sort of
heavy numerical calculations on matrices, the performance you get on
vectors-of-vectors is very poor. So if speed is a concern, you should
represent your matrices as Java arrays in which case the overhead of
indexing goes away.

Here's some example code:

(def matrix [[1 2 3]
             [4 5 6]
             [7 8 9]])

(def size 3)

(def positions
     (for [c (range size)
           r (range (inc c) size)]
       [r c]))

(reduce (fn [matrix [r c]]
          (assoc-in matrix [r c]
            (get-in matrix [c r])))
  matrix
  positions)

Hope that helps
 -Patrick

PS: And if you do use Java arrays in the future, you can make the code
much more elegant by replacing the "for" with a "doseq" and eliminate
the need for a "reduce".

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to