loops - Remove duplicates in correlations in matlab -
please see next issue:
p=rand(4,4); i=1:size(p,2) j=1:size(p,2) [r,p]=corr(p(:,i),p(:,j)) end end clearly, loop cause number of correlations doubled (i.e., corr(p(:,1),p(:,4)) , corr(p(:,4),p(:,1)). have suggestion on how avoid this? perhaps not using loop?
thanks!
i have 4 suggestions you, depending on doing compute matrices. i'm assuming illustration gave simplified version of needs done.
first method - adjusting inner loop indexone thing can alter j loop index goes 1 i. way, lower triangular matrix , concentrate on values within lower triangular half of matrix. upper half set zero. in other words:
for = 1 : size(p,2) j = 1 : %// code here end end second method - leave unchanged, utilize unique you can go ahead , utilize same matrix did before total 2 for loops, can filter duplicates using unique. in other words, can this:
[y,indices] = unique(p); y give list of unique values within matrix p , indices give locations of where these occurred within p. note these column major indices, , if wanted find row , column locations of these locations occur, can do:
[rows,cols] = ind2sub(size(p), indices); third method - utilize pdist , squareform since you're looking solution requires no loops, take @ pdist function. given m x n matrix, pdist find distances between each pair of rows in matrix. squareform transform these distances matrix have seen above. in other words, this:
dists = pdist(p.', 'correlation'); distmatrix = squareform(dists); fourth method - utilize corr method straight out of box you can utilize corr in next way:
[rho, pvals] = corr(p); corr in case produce m x m matrix contains correlation coefficient between each pair of columns n x m matrix stored in p.
hopefully 1 of these work!
matlab loops correlation
No comments:
Post a Comment