MathGroup Archive 2011

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Select from Tuplet using logical expression

  • To: mathgroup at smc.vnet.net
  • Subject: [mg116957] Re: Select from Tuplet using logical expression
  • From: Peter Pein <petsie at dordos.net>
  • Date: Sat, 5 Mar 2011 06:08:49 -0500 (EST)
  • References: <ikihne$7sk$1@smc.vnet.net> <ikq8h7$801$1@smc.vnet.net>

Am 04.03.2011 09:40, schrieb Ray Koopman:
> On Mar 1, 2:27 am, Lengyel Tamas<lt... at hszk.bme.hu>  wrote:
>> Hello.
>>
>> Skip if needed:
>> ///I am working on a part combinatorical problem with sets of 3
>> differently indexed values (e.g. F_i, F_j, F_k, F denoting frequency
>> channels) which are subsets of many values (e.g 16 different frequency
>> channels, denoted F_0, F_1 ... F_15).
>>
>> Now, I need to select triplets from these channels, I used Tuplets. So far
>> so good. From these I need those combinations where indexes i!=k and/or
>> j!=k, and i=j is allowed (e.g {i,j,k} = {12, 12, 4} is a valid channel
>> combination, but {3, 12, 3} is not).///
>>
>> So basically I need to generate triplets from a range of integer numbers,
>> where the first and second elements of these triplets do not match the
>> third. I thought Select would help, but I don't know if there exists an
>> option to control elements' values in a condition.
>>
>> > From then on I must use these triplets' elements in a function.
>>
>> But first I am asking your help in generating thos triplets of numbers.
>>
>> Thanks.
>>
>> Tam s Lengyel
>
> 1 - 6 have been posted previously. 7 is new, a modification of 6.
> 1 - 5 generate all the triples, then delete unwanted ones.
> 6&  7 generate only the triples that are wanted.
>
> The time differences seem to be reliable.
>
> r = Range[32];
> AbsoluteTiming[t1 = Select[Tuples[r,3],
>                      #[[1]]!=#[[3]]&&  #[[2]]!=#[[3]]&];     "1"]
> AbsoluteTiming[t2 = Select[Tuples[r,3],
>                      FreeQ[Most@#,Last@#]&];                "2"]
> AbsoluteTiming[t3 = Cases[Tuples[r,3],
>                      _?(FreeQ[Most@#,Last@#]&)];             "3"]
> AbsoluteTiming[t4 = DeleteCases[Tuples[r,3],
>                      _?(MemberQ[Most@#,Last@#]&)];           "4"]
> AbsoluteTiming[t5 = DeleteCases[Tuples[r,3],
>                      {k_,_,k_}|{_,k_,k_}];                   "5"]
> AbsoluteTiming[t6 = Flatten[Function[ij,Append[ij,#]&/@
>                      Complement[r,ij]] /@ Tuples[r,2], 1];   "6"]
> AbsoluteTiming[t7 = Flatten[Outer[Append,{#},
>                      Complement[r,#],1]&  /@ Tuples[r,2], 2]; "7"]
> SameQ[t1,t2,t3,t4,t5,t6,t7]
>
> {0.378355 Second, 1}
> {0.390735 Second, 2}
> {0.409103 Second, 3}
> {0.420442 Second, 4}
> {0.140180 Second, 5}
> {0.128378 Second, 6}
> {0.085107 Second, 7}
> True
>

Ray,

  you might want to add

AbsoluteTiming[t8=Flatten/@Flatten[(Distribute[{{#1},Complement[r,#1]},List]&)/@Tuples[r,{2}],1];"8"]

which needs ~95% of the time needed to calculate t7.

Peter


  • Prev by Date: Re: evaluation-- one or many levels, your thoughts?
  • Next by Date: Re: case sensitive auto-completion in Mathematica 8?
  • Previous by thread: Re: Select from Tuplet using logical expression
  • Next by thread: Re: Select from Tuplet using logical expression