Store cell arrays composed of datetimes and numbers
    5 visualizzazioni (ultimi 30 giorni)
  
       Mostra commenti meno recenti
    
Description & Goal. I have several cell arrays composed of datetimes "dt" and numbers/values "n", similar to this one:
[cellstr(dt) num2cell(n)]
ans =
  1×2 cell array
    {'19-Jun-2021 11:00:00'}    {[20]}
where
>> dt
dt = 
  datetime
   19-Jun-2021 11:00:00
>> n
ans =
    20
Both datetimes and numbers contained in those cell arrays change everytime, and are "generated" inside a loop for. 
My goal is to store all the different cell arrays, obtained inside the loop for, as matrix rows.
My Attempt. I tried to store those cell arrays by indexing with round brackets (if possible I would like to avoid curly brackets), but it does not work:
    for i = 1 : 5
        % different "datetime" and "numbers" are generated at the beginning of the loop
        store(i,:)  = [cellstr(dt) num2cell(n)]
    end
Question & Desired Output. How can I get an output like this one ?
>> store
store = 
    19-Jun-2021 11:00:00    20
    20-Jun-2021 19:00:00    44
    21-Jun-2021 17:00:00    13
    ...
2 Commenti
  Stephen23
      
      
 il 10 Ago 2022
				
      Modificato: Stephen23
      
      
 il 10 Ago 2022
  
			"I have a cell array composed of datetimes and numbers/values"
Your example show a cell array containing a character vector, not a datetime object. It is unclear why you convert a perfectly good datetime object to a less versatile character vector.
Your loop works for me (with suitable preallocation):
store = cell(5,2); % preallocate!
for i = 1:5
    dt = datetime(2022,randi([1,12]),1);
    n = randi([0,99]);
    store(i,:)  = [cellstr(dt),num2cell(n)];
end
display(store)
Risposta accettata
  Stephen23
      
      
 il 10 Ago 2022
        
      Modificato: Stephen23
      
      
 il 10 Ago 2022
  
      Your loop works for me (with suitable preallocation):
store = cell(5,2); % preallocate!
for i = 1:5
    dt = datetime(2022,randi([1,12]),1);
    n = randi([0,99]);
    store(i,:)  = [cellstr(dt),num2cell(n)];
end
display(store)
If you only have a handful of columns, I would probably just allocate using curly-brace indexing:
store = cell(5,2); % preallocate!
for i = 1:5
    store{i,1} = datetime(2022,randi([1,12]),1);
    store{i,2} = randi([0,99]);
end
display(store)
Have you considered using a table to store your data? That would mean that you get the benefits of keeing data in arrays of its native class, rather than splitting your data into lots of scalar arrays in a cell array:
tbl = table('Size', [5,2], 'VariableTypes', {'datetime', 'double'},'VariableNames',{'d','n'});
for i = 1:5
    tbl.d(i) = datetime(2022,randi([1,12]),1);
    tbl.n(i) = randi([0,99]);
end
display(tbl)
3 Commenti
Più risposte (0)
Vedere anche
Categorie
				Scopri di più su Phased Array Design and Analysis in Help Center e File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


