# [Tutor] correlation matrix

Noufal Ibrahim noufal at airtelbroadband.in
Sat Jul 21 20:54:52 CEST 2007

Beanan O Loughlin wrote:
> hi all,
>
> I am new to python, and indeed to programming, but i have a question
> regarding correlation matrices.
>
> If i have a column vector
>
> x=[1;2;3;4;5]
>
> and its transpose row vector
>
> xt=[1,2,3,4,5]
>
> is there a simple way in python to create a 5x5 correlation matrix,
> obviously symmetric and having 1's on the diagonal?

My knowledge of matrix algebra and statistics is quite rusty but from a
programming perspective, I'd understand this like so.

You want a 5x5 table of values (correlations in this case) computed from
all permutations of 2 variables selected from a set of 5 elements.

so, you'd want something like
cor(1,1)   cor(1,2)   cor(1,3) ....
cor(2,1)   cor(2,2)   cor(2,3) ...
.
.
.
Correct?

If so, I think this might be what you're looking for (I've put some
comments to make it explanatory).

>>> import Numeric
>>> x=[1,2,3]
>>> ret = []
>>> for i in x:
...  ret1=[]
...  for j in x:  # Since we're correlating an array with itself.
...   ret1.append((i,j,))  # You'd need to call the actual correlation
function here rather than just say (i,j)
...  ret.append(ret1)
...
>>> Numeric.array(ret)
array([[[1, 1],
[1, 2],
[1, 3]],
[[2, 1],
[2, 2],
[2, 3]],
[[3, 1],
[3, 2],
[3, 3]]])
>>>

The "Numeric"  module has fast implementations of matrices and other
such constructs.
I'm quite sure that this thing which I've written above can be improved
on but I think it would do your work for you.

--
~noufal