How do I correlate elements from two different cell array files?

3 views (last 30 days)
Dear community,
I have two cell array files. They are "distances_head_lefthand_windows" and "distances_head_righthand_windows".
They both look like this (in reality they are much larger with many more cells):
distances_head_lefthand_windows =
19×1 cell array
{512×54 double}
{512×50 double}
...
distances_head_righthand_windows =
19×1 cell array
{512×53 double}
{512×49 double}
...
Inside of each cell is a matrix with columns that are all 512 elements in length. What I want to do is correlate each of these columns with the matching column in the other file and save it in a cell array file called "correlations".
Example:
X1 = distances_head_lefthand_windows{1,1}(:,1);
Y1 = distances_head_righthand_windows{1,1}(:,1);
corr( X1 , Y1 )
X2 = distances_head_lefthand_windows{1,1}(:,2);
X2 = distances_head_righthand_windows{1,1}(:,2);
corr( X2 , Y2 )
... and so on.
Basically, I want to do that until all the columns in the cells of "distances_head_lefthand_windows" are correlated with all the columns of the cells in "distances_head_righthand_windows".
How would I do this?
(Sorry if this is overly complicated but I hope it makes sense. And sorry for the long names)
Thanks for your help!
  2 Comments
lil brain
lil brain on 15 Feb 2022
Hi @the cyclist thanks for the response!
1) Yes I would like to ingnore the last column. And yes, the "left" matrix is always one column bigger.
2) And yes, the output, using that example, should ideally be a 1x53 vector with 53 columns. in correlations each cell represents a participant. And in that case each participant should ideally have a 1xn vector of coefficients.
Thanks!

Sign in to comment.

Accepted Answer

the cyclist
the cyclist on 15 Feb 2022
This is done straightforwardly with loops. If this is fast enough, I would not bother trying to optimize for speed, since it is better to understand what the code is doing.
% Made up inputs. (Use your actual data instead, and rename everywhere)
L = {rand(4,3); rand(5,7)};
R = {rand(4,2); rand(5,6)};
% Preallocate memory for output
correlations = cell(size(L));
% Loop over each cell
for ncell = 1:size(L,1)
% Define the number of correlation coefficients in this cell
ncorr = size(R{ncell},2);
% Preallocate the correlation vector
correlations{ncell} = zeros(1,ncorr);
% Loop over each pair of columns
for ncoeff = 1:ncorr
% Calculate the correlation coefficient
correlations{ncell}(ncoeff) = corr(L{ncell}(:,ncoeff),R{ncell}(:,ncoeff));
end
end

More Answers (0)

Categories

Find more on Data Types in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by