Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 在matlab结构中访问多个字段_Arrays_Matlab_Struct - Fatal编程技术网

Arrays 在matlab结构中访问多个字段

Arrays 在matlab结构中访问多个字段,arrays,matlab,struct,Arrays,Matlab,Struct,我正在尝试访问结构中的多个字段,以将数据从datenum更改为datetime。结构由以下人员创建: DATA=struct('Id',[],'Date',[],'Value',[]); 由于接收数据的方式,存在多个数据,每个数据都有一个值。因此,一个足够的例子就是 Data(1).Date=2; Data(2).Date=3; 现在我想将条目更改为datetime,但保持数据结构不变。例如,让我们假设将日期平方为 Data(1).Date=4; Da

我正在尝试访问结构中的多个字段,以将数据从datenum更改为datetime。结构由以下人员创建:

    DATA=struct('Id',[],'Date',[],'Value',[]);
由于接收数据的方式,存在多个数据,每个数据都有一个值。因此,一个足够的例子就是

    Data(1).Date=2;
    Data(2).Date=3;
现在我想将条目更改为datetime,但保持数据结构不变。例如,让我们假设将日期平方为

    Data(1).Date=4;
    Data(2).Date=9;

该结构大约有50000个enries,并且
arrayfun()
没有提供足够有效的解决方案。我找不到转换整个数据数组的方法。Date ad once
deal()
在每个字段中写入所有50000个日期,并以其他方式接收错误。是否有人有办法更改整个数组并将其写回数组的每个字段?

您可以将所有值放入数组,然后在计算结果后重新填充结构

arr=[Data(:).Date];
arr=arr.^2;
for a=1:numel(arr)
   Data(a).Date=arr(a);
end

使用一个小迂回将结构转换为数组,然后进行数学运算,然后将数组转换为单元格,将逗号分隔的列表转换为结构:

arr=[Data(:).Date];
arr=num2cell(arr.^2);
[Data(:).Date]=arr{:};

它比
arrayfun()
(~3秒到~30秒)要好得多,但我希望避免for循环,因为可能有一种方法可以将其作为数组处理。尽管如此,谢谢你,如果没有其他解决方案,我会采用这个解决方案。你可能可以尝试做[Data(:).Date]=arr之类的事情,但我没有Matlab的副本来验证这一点。谢谢你,这太棒了。我对照我的旧arrayfun方法检查了两个给定解决方案的性能。对于那些对50000个条目执行datetime感兴趣的人:arrayfun-23sec for loop-3.3sec num2cell-3.3sec这两种解决方案似乎具有相同的性能,但我将坚持使用num2cell,正如前面提到的,我希望避免代码中的循环。再次感谢你们两位