为结构指定一个双精度向量?(Matlab)

为结构指定一个双精度向量?(Matlab),matlab,Matlab,我试图给一个结构分配一个双精度向量。 我有一个结构Struct1(1).Data(1:end).Date,它保存4030NaN值。我有一个名为Dates的双精度向量,它包含4030个存储为双精度的日期。如何将日期分配给结构1(1).Data(1:end).Date 总的来说,我似乎在理解如何在结构、向量和单元数组之间进行赋值时遇到了问题(我不理解(vs{vs[)。有人能告诉我如何解决上述具体问题和/或用清晰的示例向我详细说明我正在努力完成的任务吗?我觉得你真的在滥用结构数组。你可能需要重新考虑数

我试图给一个结构分配一个双精度向量。 我有一个结构
Struct1(1).Data(1:end).Date
,它保存4030
NaN
值。我有一个名为
Dates
的双精度向量,它包含4030个存储为双精度的日期。如何将日期分配给结构1(1).Data(1:end).Date


总的来说,我似乎在理解如何在结构、向量和单元数组之间进行赋值时遇到了问题(我不理解
vs
{
vs
[
)。有人能告诉我如何解决上述具体问题和/或用清晰的示例向我详细说明我正在努力完成的任务吗?

我觉得你真的在滥用结构数组。你可能需要重新考虑数据的组织。你可能会从MathWorks中发现有用的内容(注释也一样)

首先,让我们构建一个结构数组示例

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]

是的,它非常混乱和混乱。

我觉得你真的在滥用结构数组。你可能需要重新考虑数据的组织。你可能会从MathWorks中发现有用的东西(注释也一样)

首先,让我们构建一个结构数组示例

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]

是的,它非常混乱和混乱。

最终需要一个逗号分隔的列表,以便清晰地分配到结构数组的每个值。但是,双精度值不返回逗号分隔的列表,而只返回数组本身或某个子集。为此,需要先将双精度向量按顺序转换为单元格数组将向量的每个值放入自己的独立单元中,该单元可以“处理”到结构的每个数组中。您可以使用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{:}

有一些关于逗号分隔列表及其与结构、单元格的关系以及以这种方式处理其输出值的好信息。

最终,您需要一个逗号分隔列表,以便干净地分配给结构数组的每个值。但是,双值不返回逗号分隔列表,而只返回数组本身或some子集。为此,您需要首先将双精度向量转换为单元格数组,以便将向量的每个值转换为其自己的独立单元格,该单元格可以“处理”到结构的每个数组。您可以使用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{:}
关于逗号分隔列表及其与结构、单元格的关系以及以这种方式处理其输出值,有一些很好的信息