我正在尝试为结构分配双向量。
我的结构Struct1(1).Data(1:end).Date
包含4030 NaN
个值。我有一个名为Dates
的双打矢量,其中包含4030个存储为双打的日期。如何将Dates
分配给Struct1(1).Data(1:end).Date
?
一般来说,我似乎在理解如何在结构,向量和单元格数组之间进行分配时遇到问题(我不理解使用(
vs {
vs {{1 }})。有人可以告诉我如何解决上述具体问题和/或指出我用清晰的例子很好地描述了我想要完成的事情吗?
答案 0 :(得分:3)
最终,您需要一个以逗号分隔的列表,以便干净地分配到结构数组的每个值中。但是,double值不返回逗号分隔列表,而只返回数组本身或某个子集。为此,您需要首先将双向量转换为单元格数组,以便将向量的每个值放入其自己的独立单元格中,该单元格可以“处理”到结构的每个数组中。你可以用num2cell做到这一点。例如:
% Setup the data (also uses the num2cell technique)
nans = num2cell(NaN(1,4030));
s = struct;
[s.Data(1:numel(nans)).Date] = nans{:}
% Now assign valid data (note that since the structure is already allocated
% to the right size we can just use (:)
dates = num2cell(rand(size(s.Data)));
[s.Data(:).Date] = dates{:}
This page有一些关于逗号分隔列表及其与结构,单元格的关系以及以这种方式处理其输出值的良好信息。
答案 1 :(得分:2)
我觉得你真的在滥用struct数组。您可能需要重新考虑数据的组织。您可能会发现MathWorks中的this video有帮助(也有评论)。
首先让我们构建一个结构数组的示例结构数组
Struct1 = struct;
Struct1.Data = struct;
for i = 1:3
Struct1(1).Data(i).Date = rand(1,9); % Random values instead of dates for demo
end
所有三个日期字段都可以通过
输出到一个单元格数组中dates = {Struct1(1).Data(:).Date}
这给出了:
dates =
[1x9 double] [1x9 double] [1x9 double]
如果所有单元格大小相同,您可以将它们转置或连接成单个矩阵。
现在,如果要更改每个Date实例中存储的值,可以使用:
dates2 = {rand(4,1),rand(5,1),rand(6,1)}; % Create new cell array of random data
[Struct1(1).Data(:).Date] = dates2{:}; % set cell contents to each field
现在,再次作为单元格数组输出(dates3 = {Struct1(1).Data(:).Date}
)会返回刚刚存储的内容
dates3 =
[4x1 double] [5x1 double] [6x1 double]
是的,它非常混乱和混乱。