Store cell arrays composed of datetimes and numbers

조회 수: 1(최근 30일)
Sim
Sim 2022년 8월 10일
댓글: Sim 2022년 8월 10일
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
Sim
Sim 2022년 8월 10일
편집: Sim 2022년 8월 10일
Oh thanks a lot!
About "your examples show a cell array containing a character vector, not a datetime object", yes my fault... :-) Yes, I agree, datetime is a very good object.. :-) ...btw, if you copy and paste your reply in the "Answer" box I will accept it ;-)

댓글을 달려면 로그인하십시오.

채택된 답변

Stephen23
Stephen23 2022년 8월 10일
편집: Stephen23 2022년 8월 10일
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)
store = 5×2 cell array
{'01-Jul-2022'} {[27]} {'01-Dec-2022'} {[22]} {'01-Mar-2022'} {[24]} {'01-Jun-2022'} {[ 5]} {'01-Dec-2022'} {[61]}
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)
store = 5×2 cell array
{[01-Oct-2022]} {[62]} {[01-Jul-2022]} {[71]} {[01-Apr-2022]} {[ 3]} {[01-Oct-2022]} {[56]} {[01-Jan-2022]} {[53]}
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)
tbl = 5×2 table
d n ___________ __ 01-May-2022 19 01-Nov-2022 1 01-Oct-2022 90 01-Nov-2022 83 01-Sep-2022 91
  댓글 수: 3
Sim
Sim 2022년 8월 10일
thanks a lot @Stephen23 for your solution :-)

댓글을 달려면 로그인하십시오.

추가 답변(0개)

Community Treasure Hunt

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

Start Hunting!

Translated by