MathGroup Archive 2001

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

Search the Archive

Re: extracting elements from an expression

  • To: mathgroup at smc.vnet.net
  • Subject: [mg27683] Re: [mg27663] extracting elements from an expression
  • From: BobHanlon at aol.com
  • Date: Sun, 11 Mar 2001 04:04:26 -0500 (EST)
  • Sender: owner-wri-mathgroup at wolfram.com

To understand the process better, replace the values to be dropped with the 
symbol d

m = {{{{1, 2}, {d, 3}}}, {{{4, 5}, {8, 9}}, {{6, 7}, {d, 10}}}, {{{11, 
            12}, {17, 18}}, {{13, 14}, {19, 20}}, {{15, 16}, {d, 21}}}};

Your explicit solution is

soln = Join[m[[1, 1, 1]],
  Drop[m[[1, 1, 2]], 1],
  m[[2, 1, 1]],
  m[[2, 2, 1]],
  m[[2, 1, 2]],
  Drop[m[[2, 2, 2]], 1],
  m[[3, 1, 1]],
  m[[3, 2, 1]],
  m[[3, 3, 1]],
  m[[3, 1, 2]],
  m[[3, 2, 2]],
  Drop[m[[3, 3, 2]], 1]]

{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 
  18, 19, 20, 21}

This does not just Drop items, it also rearranges them compared to Flatten

soln == DeleteCases[Flatten[m], d]

False

However, the Transpose of m is sequenced properly

soln == DeleteCases[Flatten[Transpose /@ m], d]

True

The positions to be deleted are then

Position[Transpose /@ m, d]

{{1, 2, 1, 1}, {2, 2, 2, 1}, {3, 2, 3, 1}}

a = Transpose /@ m; soln ==  
  Flatten[Last[Table[a = Delete[a, {k, 2, k, 1}], {k, 3}]]]

True

Or using Nest

k = 0;
soln ==  
  Flatten[Nest[(k++; Delete[#, {k, 2, k, 1}])&, Transpose /@ m, 3]]

True

Bob Hanlon

In a message dated 2001/3/10 1:06:08 AM, amaydeu at tinet.fut.es writes:

>I've spent several frustrating hours attempting to do something in principle
>very simple.
>After repeated failures I'm resorting to the group for help.
>
>Consider this simple expression
>
>m = {{{{1, 2}, {2, 3}}}, {{{4, 5}, {8, 9}}, {{6, 7}, {7, 10}}},
>{{{11, 12}, {17, 18}}, {{13, 14}, {19, 20}}, {{15, 16}, {16, 21}}}};
>m // TableForm
>
>I'm simply trying to obtain to obtain this list
>
>{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
>21}
>
>using the positions' elements in m. This will do it the hard way
>
>Join[m[[1, 1, 1]],
>  Drop[m[[1, 1, 2]], 1],
>  m[[2, 1, 1]],
>  m[[2, 2, 1]],
>  m[[2, 1, 2]],
>  Drop[m[[2, 2, 2]], 1],
>  m[[3, 1, 1]],
>  m[[3, 2, 1]],
>  m[[3, 3, 1]],
>  m[[3, 1, 2]],
>  m[[3, 2, 2]],
>  Drop[m[[3, 3, 2]], 1]]
>
>I've failed to do it the easy way. Here's one of my failed attemps
>
>Table[If[i == j && k == 2, Drop[m[[i, j, k]], 1], m[[i, j, k]]],
>{i, nvars}, {j, i}, {k, 2}] // Flatten
>
>which fails because I don't know how to control the k subscript
>appropriately
>as you can see by doing
>
>Flatten[Table[{i, j, k}, {i, nvars}, {j, i}, {k, 2}],2]
>


  • Prev by Date: Re: Letting integers be integers (when using //N)
  • Next by Date: Re: help create a unique solution system
  • Previous by thread: Re: extracting elements from an expression
  • Next by thread: RE: extracting elements from an expression