How to return a mixture of vectors and matrices from compiled functions
- To: mathgroup at smc.vnet.net
- Subject: [mg79422] How to return a mixture of vectors and matrices from compiled functions
- From: Frank Hu <frank1998 at gmail.com>
- Date: Thu, 26 Jul 2007 05:36:26 -0400 (EDT)
Hi, all, I need to return two vectors and a matrix from a purely numerical function, by setting the last expression of the function to something like {v1,v2,m1}. v1 and v2 are column vectors, effectively nx1 matrices. The function compiles fine (no 'Function' in the 4th component in the input form). When I call the function though, I got the message CompiledFunction::"cflist" : "Nontensor object generated; proceeding with uncompiled evaluation" It can be demonstrated by the following snippet; f3 runs fine, but not f4. In[501]:= f3=Compile[{},{{{1.},{1.},{1.}},{{2.},{2.},{2.}}}] Out[501]= CompiledFunction[{},{{{1.},{1.},{1.}},{{2.},{2.},{2.}}},- CompiledCode-] In[502]:= f3[] Out[502]= {{{1.},{1.},{1.}},{{2.},{2.},{2.}}} In[503]:= f4=Compile[{},{{{1.},{1.},{1.}},{{2.},{2.},{2.}}, {{1.,0.,0.},{0.,1.,0},{0.,0.,1.}}}] Out[503]= CompiledFunction[{},{{{1.},{1.},{1.}},{{2.},{2.},{2.}}, {{1.,0.,0.},{0.,1.,0},{0.,0.,1.}}},-CompiledCode-] In[504]:= f4[] During evaluation of In[504]:= CompiledFunction::cflist: Nontensor object generated; proceeding with uncompiled evaluation. >> Out[504]= {{{1.},{1.},{1.}},{{2.},{2.},{2.}},{{1.,0.,0.},{0.,1.,0}, {0.,0.,1.}}} It seems that Compile needs the return value to have the same dimensions. Why is that? I know that compiled functions always return packed arrays, if arrays are to be returned. Developer`ToPackedArray[{v1,v2,m1}] seems to work, though. So what is the proper way to return the mixture of vectors and matrices? Frank