为结构分配双向量? (Matlab的)

时间:2013-07-26 19:08:54

标签: matlab

我正在尝试为结构分配双向量。 我的结构Struct1(1).Data(1:end).Date包含4030 NaN个值。我有一个名为Dates的双打矢量,其中包含4030个存储为双打的日期。如何将Dates分配给Struct1(1).Data(1:end).Date

一般来说,我似乎在理解如何在结构,向量和单元格数组之间进行分配时遇到问题(我不理解使用( vs { vs {{1 }})。有人可以告诉我如何解决上述具体问题和/或指出我用清晰的例子很好地描述了我想要完成的事情吗?

2 个答案:

答案 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]

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