Re: Map function with 2 variables
- To: mathgroup at smc.vnet.net
- Subject: [mg114962] Re: Map function with 2 variables
- From: Peter Pein <petsie at dordos.net>
- Date: Fri, 24 Dec 2010 04:12:39 -0500 (EST)
- References: <iev2ua$4v6$1@smc.vnet.net>
On 23.12.2010 09:57, Jagra wrote: > I have a problem that comes up in a couple of situations and I've > never found the right solution. I hoped I could get an idea of how to > generally address these kinds of things. > > Say I have a function with two variables, something like a > SpearmanRankCorrelation[] from the MultiVariate Statistics package: > > I also have matrix "m" with dimensions {3, 100} > > m = RandomReal[{0, 1}, {3, 100}]; > > Now, say I want to create a correlation matrix using the > SpearmanRankCorrelation function. > > I can get the rank correlations between a single vector of the matrix > and all the other vectors like this: > > SpearmanRankCorrelation[m[[1]], #]& /@ m > > This would give me a single row in a correlation matrix. Pretty > straightforward, but now I want all 3 rows like I would get with this: > > {SpearmanRankCorrelation[m[[1]], #]& /@ m, > SpearmanRankCorrelation[m[[2]], #]& /@ m, > SpearmanRankCorrelation[m[[3]], #]& /@ m} > > There must be a way I can do this more directly. > I must be missing something simple. > > Thanks. > Hi, the first three possibilities which come to my mind are mappin, building a table and - the easiest one - using Outer[]: In[1]:= Needs["MultivariateStatistics`"] SeedRandom[1224]; (* merry Xmas *) m=RandomReal[{0,1},{3,100}]; Function[row,SpearmanRankCorrelation[row,#]&/@m]/@m Out[4]= {{1,10139/83325,-(6157/83325)},{10139/83325,1,347/83325},{-(6157/83325),347/83325,1}} In[5]:= Table[SpearmanRankCorrelation[m[[i]],#]&/@m,{i,Length[m]}] Out[5]= {{1,10139/83325,-(6157/83325)},{10139/83325,1,347/83325},{-(6157/83325),347/83325,1}} In[6]:= Outer[SpearmanRankCorrelation,m,m,1] Out[6]= {{1,10139/83325,-(6157/83325)},{10139/83325,1,347/83325},{-(6157/83325),347/83325,1}} Peter