MathGroup Archive 2006

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

Search the Archive

Re: when dimension increases

  • To: mathgroup at smc.vnet.net
  • Subject: [mg67577] Re: [mg67531] when dimension increases
  • From: "Carl K. Woll" <carlw at wolfram.com>
  • Date: Sat, 1 Jul 2006 05:12:07 -0400 (EDT)
  • References: <200606300813.EAA27238@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

Arkadiusz Majka wrote:
> Hi,
> 
> Imagine that I want to sort (or do anything else) a list
> 
> list={5,2,8,3}
> 
> So I use Sort[list]
> 
> Next I add next dimension and obtain a list listNew=Table[list,{5}]
> 
> In order to sort all sublists of it  it I use Map[Sort, listNew]
> 
> Now I add another more dimension listNew1=Table[list, {3},{5}]
> 
> I can again sort all sublists of it using combination of Table and Map.
> 
> The question is the following:
> 
> How can I deal with expresions of unknown a priori dimension? For
> example what is the most elegant (clear and fast) method of sorting all
> sublists of multidimensional expresion? I would like to avoid Table and
> unclear expresions with many "Maps" (one embeded in another).
> 
> Thanks for your help,
> 
> Arek

It's unclear to me what you are trying to do, but maybe the following 
will help. There is an optional third argument to Map. Here is an 
example list:

In[15]:= data = Table[Random[Integer, 10], {3}, {5}, {3}]

Out[15]= {
   {{0, 2, 0}, {4, 8, 4}, {10, 1, 6}, {2, 8, 4}, {2, 10, 10}},
   {{2, 7, 0}, {9, 7, 5}, {1, 0, 8}, {5, 7, 3}, {7, 6, 4}},
   {{9, 4, 6}, {6, 3, 8}, {1, 7, 9}, {3, 9, 5}, {8, 7, 8}}
  }

Suppose you just want to sort the inner lists of integer triples. Then:

In[16]:= Map[Sort, data, {-2}]

Out[16]= {
   {{0, 0, 2}, {4, 4, 8}, {1, 6, 10}, {2, 4, 8}, {2, 10, 10}},
   {{0, 2, 7}, {5, 7, 9}, {0, 1, 8}, {3, 5, 7}, {4, 6, 7}},
   {{4, 6, 9}, {3, 6, 8}, {1, 7, 9}, {3, 5, 9}, {7, 8, 8}}
  }

Suppose you want to sort the inner list of integer triples and the inner 
list of 5 integer triples:

In[17]:= Map[Sort, data, {-3, -2}]

Out[17]= {
   {{0, 0, 2}, {1, 6, 10}, {2, 4, 8}, {2, 10, 10}, {4, 4, 8}},
   {{0, 1, 8}, {0, 2, 7}, {3, 5, 7}, {4, 6, 7}, {5, 7, 9}},
   {{1, 7, 9}, {3, 5, 9}, {3, 6, 8}, {4, 6, 9}, {7, 8, 8}}
  }

If you are unsure how Sort is being applied to the data, you can always 
replace it with a nonevaluating head, e.g.:

In[18]:= Map[sort, data, {2}]

Out[18]= {
   {sort({0, 2, 0}), sort({4, 8, 4}), sort({10, 1, 6}), sort({2, 8, 4}),
    sort({2, 10, 10})},
   {sort({2, 7, 0}), sort({9, 7, 5}), sort({1, 0, 8}), sort({5, 7, 3}),
    sort({7, 6, 4})},
   {sort({9, 4, 6}), sort({6, 3, 8}), sort({1, 7, 9}), sort({3, 9, 5}),
    sort({8, 7, 8})}
  }

Carl Woll
Wolfram Research


  • Prev by Date: Re: SetOptions for Notebooks
  • Next by Date: Re: Forcing a parameter to be integer when using 'Integrate'
  • Previous by thread: Re: when dimension increases
  • Next by thread: RE: when dimension increases