- will likely face numeric issues with the floating point numbers used.
- is an inefficient waste of memory: consider that today (for example) has the serial date number 737401: this means that to store just one data value you would have to create an array with nearly one million elements in it!
I want to name variables while writing into matfile in a for loop
2 次查看(过去 30 天)
显示 更早的评论
I have a loop over dates and all the value(mostly cell arrays) comes out from this loop is going to be saved into matfile. But I want to name those variables by this dates I've been looping over. You can see this part of the code below.
m = matfile('myFile.mat','Writable',true);
d1=datenum(dateStart);
d2=datenum(dateEnd);
for Date = d1:d2
...
....
m.datestr(Date) = outCell;
end
but obviously that doesn't work. It says "To index into the new variable 'datestr', specify at least two dimensions. MatFile objects do not support linear indexing".
2 个评论
Stephen23
2018-12-7
编辑:Stephen23
2018-12-7
That is very bad data design. Using serial date numbers as an index:
Using serial date numbers as indices is tantamount to putting meta-data into variable names or fieldnames: meta-data is data, and so it should be stored as data, not as indices.
"But I want to name those variables by this dates I've been looping over"
That is very bad data design. Meta-data, such as your dates, should not be forced into variable names or fieldnames. Read this to know why:
Instead, you should keep your data in arrays and use efficient indexing. Simply storing the data in two arrays with corresponding elements would likely be the simple MATLAB solution:
dates = [D1,D2, ..., Dn]
data = {C1,C2, ..., Cn}
Or you could use a table. Or a structure:
S(1).date = D1
S(1).data = C1
...
S(n).date = Dn
S(n).data = Cn
All of those would be easy to define in a loop, or at once using table, struct, etc.
回答(1 个)
Walter Roberson
2018-12-7
Do the datestr(Date) and store the string into a variable . Then use dynamic field naming .
m.(date_string) = values
You do not really need to use aa temporary variable but it helps make code clearer .
6 个评论
Walter Roberson
2018-12-7
Using this approach of dynamic field names is probably not the best, but it can have its uses, especially when there are external interface requirements.
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Loops and Conditional Statements 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!