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