MathGroup Archive 2000

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

Search the Archive

Re: Rearranging a tensor

  • To: mathgroup at smc.vnet.net
  • Subject: [mg22492] Re: [mg22433] Rearranging a tensor
  • From: Andrzej Kozlowski <andrzej at tuins.ac.jp>
  • Date: Sat, 4 Mar 2000 02:26:56 -0500 (EST)
  • Sender: owner-wri-mathgroup at wolfram.com

My transform1 below is written in a style which is not considered the best
for a mathematica program, Here is a nicer, functional version:

In[1]:=
transform3[l_] := 
  Module[{s = Dimensions[l]},
    Transpose[
      Apply[AppendColumns, Map[Apply[AppendRows, #] &, Transpose[l]]]]]

(This needs the LinearAlgebra`MatrixManipulation` package).

on 3/1/00 12:11 PM, Andrzej Kozlowski at andrzej at tuins.ac.jp wrote:

> I can't think of a *really simple* way. But if yoou load in the package
> 
> << LinearAlgebra`MatrixManipulation`
> 
> you can define something like:
> 
> 
> In[3]:=
> transform1[l_] :=
> Module[{s = Dimensions[l]},
> Transpose[
> Apply[AppendColumns,
> Table[Apply[AppendRows, Table[l[[i, j]], {i, 1, s[[1]]}]], {j, 1,
> s[[2]]}]]]]
> 
> then taking your definition of c we get:
> 
> In[10]:=
> transform1[c] // MatrixForm
> Out[10]//MatrixForm=
> 1   1   1   2   2   2
> 
> 1   1   1   2   2   2
> 
> 1   1   1   2   2   2
> 
> 3   3   3   4   4   4
> 
> 3   3   3   4   4   4
> 
> 3   3   3   4   4   4
> 
> 
> You can also do this without the package:
> 
> In[11]:=
> transform2[l_] :=
> Module[{s = Dimensions[l]},
> Flatten[Map[Transpose,
> Partition[Partition[Flatten[l], Last[s]], s[[2]]*s[[-2]]]], 1]]
> 
> 
> In[12]:=
> transform2[c] // MatrixForm
> 
> Out[12]//MatrixForm=
> 1   1   1   2   2   2
> 
> 1   1   1   2   2   2
> 
> 1   1   1   2   2   2
> 
> 3   3   3   4   4   4
> 
> 3   3   3   4   4   4
> 
> 3   3   3   4   4   4
> 
> One can generalize this to higher tensors but it soon gets complicated.
> 
> on 3/1/00 6:40 AM, DIAMOND Mark at noname at noname.com wrote:
> 
>> I have
>> 
>> In[1]:= a={{1,2},{3,4}};
>> 
>> In[2]:= b=Table[1,{3},{3}];
>> 
>> In[3]:= c=Outer[Times,a,b]
>> 
>> Out[3]= {{{{1, 1, 1}, {1, 1, 1}, {1, 1, 1}},
>> 
>>> {{2, 2, 2}, {2, 2, 2}, {2, 2, 2}}},
>> 
>>> {{{3, 3, 3}, {3, 3, 3}, {3, 3, 3}}, {{4, 4, 4}, {4, 4, 4}, {4, 4, 4}}}}
>> 
>> In[4]:= c//MatrixForm
>> 
>> Out[4]//MatrixForm=
>> 1 1 1   2 2 2
>> 1 1 1   2 2 2
>> 1 1 1   2 2 2
>> 
>> 3 3 3   4 4 4
>> 3 3 3   4 4 4
>> 3 3 3   4 4 4
>> 
>> I would now like to rearrange c so that it is of the form
>> {{1,1,1,2,2,2},{1,1,1,2,2,2},{1,1,1,2,2,2},{3,3,3,4,4,4},{ 3,3,3,4,4,4},{3,3
>> ,3,4,4,4}}
>> 
>> There must be a *simple* way to do this but I cannot see it. Help would be
>> appreciated.
>> 
>> Cheers,
>> 
>> Mark R Diamond
>> Vision Research Laboratory
>> The University of Western Australia
>> no spam email: markd at psy dot uwa dot edu dot au
>> 
>> 
>> 
>> 

-- 




  • Prev by Date: Re: ListPlot with missing values
  • Next by Date: Re: ListPlot with missing values
  • Previous by thread: Re: Rearranging a tensor
  • Next by thread: Re: Rearranging a tensor