Invalid data type - converting to cell array to run functions

1 view (last 30 days)
I essentially want to pull the data from timepoints of interest and run the same functions for each "bout of data" even though these bouts are not always the same length. I understand a cell array will be helpful for this, but when I try to write for loop, the data is no longer in 'double' form to perform functions.
How can I convert to cell array but keep the data in 'double' type?
Example failure 1
% tot_dff: vector of data across time
%f_i & f_o : variables corresponding to time on and off for periods of interest in the data
for i=1:length(f_i);
dff{i} = num2cell(tot_dff(1,f_i(i):f_o(i)));
end
X = cellfun(@mean,dff);
Y = cellfun(@max,dff);
Error using sum
Invalid data type. First argument must be numeric or logical.
% In this case dff is 1x46 cell which each cell containing cells corresponding to each data point.
Example failure 2
for i =1:length(f_i);
dff{i} = {tot_dff(1,f_i(i):f_o(i))};
end
X=cellfun(@mean,dff);
Y=cellfun(@max,dff);
%in this case, dff is 1x46 cell array with each cell containing my list of numbers in [ ] . Still can't run the functions on it and get the same error.
When I create my cell array by hand
dff = {tot_dff(1:3),tot_dff(6:10)} ........ this works but will take me forever!
Thank you for your help!

Accepted Answer

Stephen23
Stephen23 on 21 Oct 2020
Edited: Stephen23 on 21 Oct 2020
In both cases your code nests a cell array inside a cell array:
dff{i} = num2cell(tot_dff(1,f_i(i):f_o(i)));
% ^^^^^^^^^ ^ % define the RHS as a cell array
% ^ ^ % place the RHS in another cell array
The nesting is superfluous, you only need one cell array (on the LHS), e.g.:
nml = length(f_i);
dff = cell(1,nml); % preallocate!
for k = 1:nml;
dff{k} = tot_dff(1,f_i(k):f_o(k));
end % ^ ^ do NOT make this a cell array !

More Answers (0)

Categories

Find more on Creating and Concatenating Matrices 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!