TensorQ
- To: mathgroup at smc.vnet.net
- Subject: [mg20686] TensorQ
- From: "Ersek, Ted R" <ErsekTR at navair.navy.mil>
- Date: Sun, 7 Nov 1999 02:10:16 -0500
- Sender: owner-wri-mathgroup at wolfram.com
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
- Follow-Ups:
- Re: TensorQ
- From: Bob HYDE <bobhyde@wanadoo.fr>
- Re: TensorQ