(defn min-dist [coll]
  (let [minval (reduce min coll)]
    (map #(if (= minval %) 1 0) coll)))

this function, if you pass
user=> (min-dist [2 1 2 6 4])
(0 1 0 0 0)

assume the 5 vectors are stored in a b c d e.

user=> (apply map vector (map min-dist (map vector a b c d e)))
([0 0 0 0] [1 0 0 0] [0 0 0 0] [0 1 0 0] [0 0 1 1])


On Wed, Dec 2, 2009 at 7:59 PM, Don <josereyno...@gmail.com> wrote:
> I still can't figure it out.  If have this set.
>
>  a [2 4 6 7]
>  b [1 3 9 2]
>  c [2 4 5 6]
>  d [6 1 3 8]
>  e [4 8 2 1]
>
> If I do (reduce min (map #(get % 0) (list a b c d e)))
>
> It grabs the min value from index 0 of the five vectors and returns 1
> corresponding to 'b'. But I'm not sure how I would determine it's
> coming from 'b'.  I need to know that it comes from 'b' in order to
> build the new vector.
>
> If I do (vec (map min a b c d e))
>
> It grabs the min value from index (0, 1, 2, 3) and puts it in a vector
>
> [1 1 2 1]
>
> And I don't know from what vector the minimum value is coming from.
>
> The solution is probably already here but I can't think of it.  Sorry.
>
>
> On Dec 2, 3:40 pm, Wilson MacGyver <wmacgy...@gmail.com> wrote:
>> assuming, vector a b c d e are already defined.
>>
>> I'd do
>>
>> user=> (map vector a b c d e)
>> ([2 1 2 6 4] [4 3 4 1 8] [6 9 5 3 2] [7 2 6 8 1])
>>
>> you can then use the solutions provided from previous messages
>> to find the min value of each vector.
>>
>> so you then end up with
>>
>> [0 1 0 0 0] [0 0 0 1 0] [0 0 0 0 1] [0 0 0 0 1]
>>
>> at that point, you repeat the same trick
>>
>> (map vector [0 1 0 0 0] [0 0 0 1 0] [0 0 0 0 1] [0 0 0 0 1])
>>
>> and that will give you
>>
>> [0 0 0 0] [1 0 0 0] [0 0 0 0] [0 1 0 0] [0 0 1 1]
>>
>>
>>
>>
>>
>> On Wed, Dec 2, 2009 at 6:22 PM, Don <josereyno...@gmail.com> wrote:
>> > Thank you Stefan and Kevin.  Awesome solutions that answer my
>> > question.  However I actually made a mistake in posing my question.
>> > Let me attempt to ask my question again.
>>
>> >  I have 5 vectors as such:
>> >  a [2 4 6 7]
>> >  b [1 3 9 2]
>> >  c [2 4 5 6]
>> >  d [6 1 3 8]
>> >  e [4 8 2 1]
>>
>> > and the output i want is this
>>
>> > a1 [0 0 0 0]
>> > b1 [1 0 0 0]
>> > c1 [0 0 0 0]
>> > d1 [0 1 0 0]
>> > e1 [0 0 1 1]
>>
>> > Now I'm not sure if it can  be done in one swoop, or should be done in
>> > a loop.  I was thinking a loop, but I'm having trouble thinking about
>> > it.
>>
>> > I initially thought of creating a function that takes in 5 vectors and
>> > returns a single vector.  So the first time its called it  would
>> > return a1 [0 0 0 0] then call it again and return b1 [1 0 0 0] etc...
>> > I know it will repeat calculations however I couldn't come up with
>> > anything else.
>>
>> > Thank you.
>>
>> > On Dec 2, 2:55 pm, Kevin Downey <redc...@gmail.com> wrote:
>> >> user=> (vec (map min [2 4 6 7] [1 3 9 2] [2 4 5 6] [6 1 3 8] [4 8 2 1]))
>> >> [1 1 2 1]
>> >> user=>
>>
>> >> On Wed, Dec 2, 2009 at 2:53 PM, Stefan Kamphausen
>>
>> >> <ska2...@googlemail.com> wrote:
>> >> > Hi,
>>
>> >> > On Dec 2, 11:43 pm, Don <josereyno...@gmail.com> wrote:
>> >> >> I am having difficulty approaching this problem.  I'm not sure if it
>> >> >> can be done in one swoop, or requires a few steps.
>>
>> >> >> I have 5 vectors as such:
>>
>> >> >> a [2 4 6 7]
>> >> >> b [1 3 9 2]
>> >> >> c [2 4 5 6]
>> >> >> d [6 1 3 8]
>> >> >> e [4 8 2 1]
>> >> >> And I want to take the minimum value at a given index between the
>> >> >> vectors.  Therefore, minimum value at index 0 would yield the value 1
>> >> >> from vector b.
>>
>> >> > a quick shot would be
>>
>> >> > (reduce min (map #(get % 0) (list a b c d e)))
>>
>> >> > It would be nicer to have a vector of vectors or a list of vectors at
>> >> > the beginning, probably.
>>
>> >> > Cheers,
>> >> > Stefan
>>
>> >> > --
>> >> > 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
>>
>> >> --
>> >> And what is good, Phaedrus,
>> >> And what is not good—
>> >> Need we ask anyone to tell us these things?
>>
>> > --
>> > 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
>>
>> --
>> Omnem crede diem tibi diluxisse supremum.
>
> --
> 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



-- 
Omnem crede diem tibi diluxisse supremum.

-- 
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