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 _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor