Re: Coding an inverse permutation
- To: mathgroup at smc.vnet.net
- Subject: [mg79112] Re: [mg79078] Coding an inverse permutation
- From: "Carl K. Woll" <carlw at wolfram.com>
- Date: Thu, 19 Jul 2007 03:24:17 -0400 (EDT)
- References: <200707180652.CAA04270@smc.vnet.net>
Diana wrote:
> Folks,
>
> I have the following list:
>
> aa={1, 2, 5, 3, 4, 8, 9, 7, 11, 6, 13, 17, 10, 16, 19, 15, 14, 20, 21,
> 23, 25, 12, 29, 31, 18, 22,
> 37, 27, 26, 28, 33, 35, 32, 24, 41, 43, 30, 34, 47, 39, 38, 40, 45,
> 49, 44, 36, 53, 55, 46, 52,
> 59, 51, 50, 56, 57, 61, 62, 42, 67, 71, 48, 58, 65, 63, 64, 68, 69,
> 73, 74, 54, 77, 79, 60, 76,
> 83, 75, 80, 70, 81, 89, 85, 66, 95, 97, 72, 82, 91, 87}
>
> I want to figure out a clean way to code its inverse permutation.
>
> The inverse permutation list would start as follows:
>
> bb={1,2,4,5,3,10,8,6, ...}
>
> Since "3" is in position 4 of aa, position 3 of bb will be "4".
> Since "5" is in position 3 of aa, position 5 of bb will be "3".
>
> Can someone give me a suggestion as to how to code this?
>
> Thanks, Diana
>
I don't think aa qualifies as a permutation, so finding the inverse
permutation will be difficult. This is because the list aa only has 88
elements, but it contains elements greater than 88. For example, aa
contains 91 in position 87, so presumably 87->91. However, as there are
only 88 elements in aa, we don't know where 91 goes to.
I think a permutation list of length n should contain the numbers 1 to n
in some permuted order.
At any rate, if your list is a permutation list as I defined above, then
the following is one way to find the inverse permutation:
invperm[p_] := Module[{t=p}, t[[p]]=Range[Length[p]]; t]
Carl Woll
Wolfram Research
- References:
- Coding an inverse permutation
- From: Diana <diana.mecum@gmail.com>
- Coding an inverse permutation