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
>>
>>
>>
>>
--