How to store columns of different lengths using cells
2 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Fede C 2018 London
le 11 Mar 2019
Modifié(e) : per isakson
le 12 Mar 2019
Dear all,
I understand that in order to store column vectors of different length one ought to use cells. I fail to see my mistake in attempting to do this in the code below. I get the following error message: 'Array indices must be positive integers or logical values' but I don't really know what that means. Here's my attempt:
clc;
clear;
[~,~,raw] = xlsread( '21series',8) ;
dates = cellfun( @(x) sscanf( x, 'Q%d %d' ), raw(2:end,1), 'UniformOutput', false ) ;
dates = horzcat( dates{:} ).' ;
headers = raw(1,2:end) ;
select = raw(2:end,2:end) ; % Cell array mixed str/values.
select(cellfun( @ischar, select )) = {NaN} ; % Cell array NaN/values
select = cell2mat( select ) ; % Numeric array.
[nnn,kkk] = size(select);
for colidtrim=1:kkk;
datalogical(:,colidtrim)=~ isnan(select(:,colidtrim));
end
newData=cell(1,kkk);
for colidback2num=1:kkk
trimtempstoreCol = select(~isnan(select(:,colidback2num)),colidback2num);
newData{trimtempstoreCol};
end
Any suggestions?
Many thanks
1 commentaire
Bob Thompson
le 12 Mar 2019
Which line specifically gives the error?
Is 'trimtempstoreCol' always a postive integer?
Réponse acceptée
per isakson
le 12 Mar 2019
Modifié(e) : per isakson
le 12 Mar 2019
I assume that you intend to put successive values of trimtempstoreCol into cells of newData.
To do that, replace
newData{trimtempstoreCol};
by
newData( 1, colidback2num ) = {trimtempstoreCol};
or by
newData{ 1, colidback2num } = trimtempstoreCol;
That will make your code run.
PS: datalogical is never used.
0 commentaires
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Environment and Settings dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!