I have a working function to slice multidimensional nested vectors a
la MATLAB (actually more like NumPy).
I'm using Konrad Hinsen's multi-array library (keep up the great work
Konrad!). Here's the code (I'm sure it can be greatly improved and
optimized):
(defn nv-subvec [x & ind]
(loop [v x
dim 0
i ind]
(let [[start end step] (first i)
other (rest i)]
(if (empty? other)
(nv-sample v dim start end step)
(recur (nv-sample v dim start end step) (inc dim) other)))))
It works like this:
(nv-subvec VECTOR SLICE+)
where each SLICE is [STAR END STEP].
Here's a 3 x 3 matrix:
(def a [[[1 2 3] [4 5 6] [7 8 9]] [[10 11 12] [13 14 15] [16 17 18]]
[[19 20 21] [22 23 24] [25 26 27]]])
user=> (nv-subvec a [0 3 2] [0 2 1] [1 3 1])
[[[2 3] [5 6]] [[20 21] [23 24]]]
user=> (nv-subvec a [0 3 2] [0 2 1])
[[[1 2 3] [4 5 6]] [[19 20 21] [22 23 24]]]
The result is correct in both cases. Seems to work fine. Of course a
lot of space for improvement.
Let me know what you think.
On Jan 11, 8:26 am, Konrad Hinsen <[email protected]> wrote:
> On 10 Jan 2010, at 21:39, extrackc wrote:
>
> > Have you looked into Incanter project? I just found out about it
> > recently. "Incanter is a Clojure-based, R-like platform for
> > statistical computing and graphics." http://incanter.org/
>
> Incanter uses ParallelColt as its underlying matrix library. While
> this is a fine library for working with matrices, it is not a
> multidimensional array library. Colt arrays exist only in 1, 2, and 3
> dimensions and there are no generic (dimension-independent) operations
> on array structure.
>
> As the huge success of Matlab has shown, a lot can be done with just
> matrices and vectors, but anyone who has used an array language (such
> as APL) or an equivalent library (such as Python's NumPy) will feel
> constrained by such an approach.
>
> Konrad.
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en