Re: TensorQ
- To: mathgroup at smc.vnet.net
 - Subject: [mg20699] Re: [mg20686] TensorQ
 - From: Bob HYDE <bobhyde at wanadoo.fr>
 - Date: Mon, 8 Nov 1999 02:48:44 -0500
 - Organization: ALP OPTICS
 - References: <199911070710.CAA10906@smc.vnet.net.>
 - Sender: owner-wri-mathgroup at wolfram.com
 
Ted,  a list is a tensor so it is a bit much to exclude it.
As I see it;
In Mathematica expressions with a Head List are all Tensors of rank  1 to  Infinity.  A
simple list has Tensor Rank =1. A matrix has tensor rank =2
Above 2 we have what are commonly referred to as  tensors as distinct from
simple matrices.
Think of them all as arrays..
    Example.
In[1]:=
l = Array[f, 1];
m = Array[f, {1, 2}];
t = Array[f, {1, 2, 3}];
In[4]:=
TensorRank[l]
Out[4]=
1
In[5]:=
TensorRank[m]
Out[5]=
2
In[6]:=
TensorRank[t]
Out[6]=
3
Bob
"Ersek, Ted R" a *crit :
> I was thinking it would be nice to have a function that determines if
> something is a vector, matrix, or higher dimension analogue of a matrix.  Is
> something like that called a tensor?  I know almost nothing about tensors.
> Anyway I wrote an elegant program that performs such a test and called it
> TensorQ.
>
> In[1]:=
> TensorQ[tnsr_List] := With[{ s1=Level[tnsr,{TensorRank[tnsr]}]  },
>     FreeQ[s1,_List,{1}]
>  ]
>
> Suppose (tnsr) above is a vector, matrix, or similar structure with greater
> dimensions.
> Then (s1) will be all the elements of the vector, matrix, etc.
> Next I use FreeQ to see if any of these elements have the head List.
> I give FreeQ the level specification {1} which tells it to ignore lists
> inside the elements.
>
> TensorQ  does what I want in the examples below.
>
> ----------------
> In[2]:=
> TensorQ[  {1, 2, foo[3, {1}] }  ]
> Out[2]=
> True
>
> In[3]:=
> TensorQ[{{1,2,3},{2,3,4}}]
> Out[3]=
> True
>
> In[4]:=
> TensorQ[ {{{2, 1}, {3, 2}}, {{4, foo[3, {1}]}, {5, 4}}} ]
> Out[4]=
> True
>
> In[5]:=
> TensorQ[{1,2,{3}}]
> Out[5]=
> False
>
> In[6]:=
> TensorQ[{{1,2,3},{2,3,4,5}}]
> Out[6]:=
> False
>
> In[7]:=
> TensorQ[{{{2,1},{3,2}},{{4,3,4},{5,4}}}]
> Out[7]=
> False
>
> In[8]:=
> TensorQ[{f[1,2,3],f[3,4,5]}]
> Out[8]=
> True
>
> You can read about Level and level specification at my web site.
>
> --------------------
> Regards,
> Ted Ersek
>
> For Mathematica tips, tricks see
> http://www.dot.net.au/~elisha/ersek/Tricks.html
- References:
- TensorQ
- From: "Ersek, Ted R" <ErsekTR@navair.navy.mil>
 
 
 - TensorQ