(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 <[email protected]> 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 <[email protected]> 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 <[email protected]> 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 <[email protected]> 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
>>
>> >> <[email protected]> wrote:
>> >> > Hi,
>>
>> >> > On Dec 2, 11:43 pm, Don <[email protected]> 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 [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
>>
>> >> --
>> >> 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 [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
>>
>> --
>> 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 [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
--
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 [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