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