Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Re: vector ordering problem

3 views
Skip to first unread message

Bob Hanlon

unread,
Jun 1, 2012, 5:18:06 AM6/1/12
to
In Mathematica you cannot use _ in names

vector1 = {32, 4, 28, 11, 20};

vector2 = {78, 12, 95, 14, 35};

positionVector1 = Ordering[vector1]

{2, 4, 5, 3, 1}

Note that this is not what you presented and

vector2[[positionVector1]]

{12, 14, 35, 95, 78}

A way to obtain your requested result

positionVector2 =
With[{v = Sort[vector1]}, Position[v, #] & /@ vector1 // Flatten]

{5, 1, 4, 2, 3}

vector2[[positionVector2]]

{35, 78, 14, 12, 95}


Bob Hanlon


On Thu, May 31, 2012 at 2:51 AM, Marco Lazzaretti
<marco.laz...@gmail.com> wrote:
> Hi,
> I have these two vectors, vector1 and vector2.
> I need to have vector2 sorted by a positions vector, given by a
> vector1.
> e.g.
> vector1 ={32,4,28,11,20}
> position_vector1= Ordering[vector1]
> position_vector1 = {5,1,4,2,3}
>
> vector2 = {78,12,95,14,35}
>
> requested output
> {35,78,14,12,95}
>
> that is, I have this position vector, as an output from another
> calculation; then i need my input vector to be sorted as the position
> vector says.
> Obviously, my real input vector is quite bigger so i can't sort it
> manually... I hope the small example can explain my problem better
> than my words...
>

Bill Rowe

unread,
Jun 1, 2012, 5:18:36 AM6/1/12
to
On 5/31/12 at 2:51 AM, marco.laz...@gmail.com (Marco
Lazzaretti) wrote:

>Hi, I have these two vectors, vector1 and vector2. I need to
>have vector2 sorted by a positions vector, given by a vector1. e.g.
>vector1 ={32,4,28,11,20}
>position_vector1= Ordering[vector1]
>position_vector1 = {5,1,4,2,3}

This is clearly code you did not try in Mathematica. That is:

In[1]:= vector1 = {32, 4, 28, 11, 20};
Ordering[vector1]

Out[2]= {2,4,5,3,1}

And trying to do

position_vector1 = Ordering[vector1]

will result in an error. Mathematica does not allow an
underscore character in a variable name. The underscored
character has a reserved system meaning.

>vector2 = {78,12,95,14,35}

>requested output {35,78,14,12,95}

This is easily done.

In[3]:= vector2 = {78, 12, 95, 14, 35};
pos = {5, 1, 4, 2, 3};
vector2[[pos]]

Out[5]= {35,78,14,12,95}

Here I've used the position vector you posted rather than what
would be returned by Ordering. If instead I use Ordering the
result would be:

In[6]:= vector2[[Ordering@vector1]]

Out[6]= {12,14,35,95,78}


0 new messages