2013-07-26 64 views
1

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

一般情况下,我似乎有了解如何结构,载体和细胞阵列(我不明白使用( VS { VS [)之间进行分配的问题。有人能告诉我如何解决上述的具体问题,并且/或者指出我想要用清晰的例子来完成我想要完成的任务吗?

回答

2

我觉得你真的滥用结构数组。您可能需要重新考虑您的数据组织。您可能会发现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] 

你可以转置这些或连接成一个单一的矩阵,如果全部的细胞具有相同的大小。

现在如果你想改变存储在日期的每个实例的值,你可以使用:

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] 

是的,这是相当混乱和混乱。

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大约有逗号分隔列出了一些好的信息以及它们对结构,细胞的关系,以及处理这样的输出值。