Re: Map function with 2 variables
- To: mathgroup at smc.vnet.net
- Subject: [mg114961] Re: Map function with 2 variables
- From: Bill Rowe <readnews at sbcglobal.net>
- Date: Fri, 24 Dec 2010 04:12:28 -0500 (EST)
On 12/23/10 at 3:56 AM, jagra24891 at mypacks.net (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.
By using Subsets, you can generate pairs of row/column indices.
That is:
In[13]:= Subsets[Range[3], {2}]
Out[13]= {{1, 2}, {1, 3}, {2, 3}}
So, your goal can be achieved as:
SpearmanRankCorrelation@@(m[[#]])&/@Subsets[Range[3],{2}]