Arrays 有没有办法将双数组转换为结构数组?
有没有办法将双数组转换为结构数组并将其放在一个字段下 例如,假设我们通过调用Arrays 有没有办法将双数组转换为结构数组?,arrays,matlab,struct,Arrays,Matlab,Struct,有没有办法将双数组转换为结构数组并将其放在一个字段下 例如,假设我们通过调用cellfun得到一个双数组,输出数组如下所示 data=[1,2;3,4]; 我们能在哪里得到一个structS吗 S=struct; for i=1:numel(data) S(i).data=data(i); end end 使用本机函数还是只高效地获取S?(结尾处可见) 如果存在方法,则生成的struct数组能否保留原始双数组的维度?该方法是否适用于输出为双数组的cellfun的输出
cellfun
得到一个双数组,输出数组如下所示
data=[1,2;3,4];
我们能在哪里得到一个struct
S吗
S=struct;
for i=1:numel(data)
S(i).data=data(i);
end
end
使用本机函数还是只高效地获取S?(结尾处可见)
如果存在方法,则生成的struct
数组能否保留原始双数组的维度?该方法是否适用于输出为双数组的cellfun
的输出
在我的特定应用程序中,我的data
是调用cellfun
的(统一)输出,当我设置S.data=cellfun(…)
时,结果是一个1元素结构数组,其中S.data
是cellfun(…)
的m-by-n双数组。如何分配数组元素
(我手头的任务是每个查询处理10k个数据点,每个任务大约16个查询。因此速度很重要。如果没有有效的方法,我会知道如何避免这种特殊类型的任务使用struct。因此,前面的注释也很有帮助。)
使用
struct
和num2cell
:
data = [1,2;3,4];
S = struct ('data', num2cell(data));
使用
struct
和num2cell
:
data = [1,2;3,4];
S = struct ('data', num2cell(data));
当你想为矩阵的每个元素都有一个单独的字段时,我不得不说:不,没有标准的解决方案。如果您不是绝对需要它,我不建议您这样做,请参阅。它只是需要更多的记忆,而且看的时候有点痛 尽管如此,这是可能的,但必须以字符开头字段的每个名称
data = [1,2;3,4];
% create empty struct
S = struct();
%% create new structure
for i = 1:length(data)
% create field name (must start with a character!)
fld = num2str(i,'F%d');
% write to field (note the brackets)
S.(fld) = data(i);
end
在这种情况下,如果您希望通过循环访问数据,请使用MATLAB buildin函数fieldnames
,这是一种比您自己构建字段名更通用的方法(并且在删除一个字段时避免不足;)
当你想为矩阵的每个元素都有一个单独的字段时,我不得不说:不,没有标准的解决方案。如果您不是绝对需要它,我不建议您这样做,请参阅。它只是需要更多的记忆,而且看的时候有点痛 尽管如此,这是可能的,但必须以字符开头字段的每个名称
data = [1,2;3,4];
% create empty struct
S = struct();
%% create new structure
for i = 1:length(data)
% create field name (must start with a character!)
fld = num2str(i,'F%d');
% write to field (note the brackets)
S.(fld) = data(i);
end
在这种情况下,如果您希望通过循环访问数据,请使用MATLAB buildin函数fieldnames
,这是一种比您自己构建字段名更通用的方法(并且在删除一个字段时避免不足;)
嗨,谢谢你的回复。对不起,我很难理解。每查询一次,我可能会将6个n×1双数组存储到一个包含6个字段的n×1结构数组中。我将重复相同类型的查询,但每次都是一个新的结构。这还不好吗?将其存储在一个n×6的矩阵中,在内存方面,可能在进一步处理方面,都比将数组填充到结构中更有效。如果您负担得起,并且它有助于您保持对代码的概述,那么就继续使用structsNo。这又是一个更高的结构。如果您没有大数据,只需选择最适合您的结构即可。我现在将使用表。不,我不会说我的数据集很大。一次只有十几个10k×6阵列。大到足以让我在处理数据时关注效率。但还不够大,不需要在这方面付出最后的努力。Than table是最方便的选择,因为您可以为列指定有意义的名称(使代码更容易理解),并且仍然可以像单元格一样循环。您好,感谢您的回复。对不起,我很难理解。每查询一次,我可能会将6个n×1双数组存储到一个包含6个字段的n×1结构数组中。我将重复相同类型的查询,但每次都是一个新的结构。这还不好吗?将其存储在一个n×6的矩阵中,在内存方面,可能在进一步处理方面,都比将数组填充到结构中更有效。如果您负担得起,并且它有助于您保持对代码的概述,那么就继续使用structsNo。这又是一个更高的结构。如果您没有大数据,只需选择最适合您的结构即可。我现在将使用表。不,我不会说我的数据集很大。一次只有十几个10k×6阵列。大到足以让我在处理数据时关注效率。但还不够大,不需要在这方面付出最后的努力。Than table是最方便的选择,因为您可以为列指定有意义的名称(使代码更容易理解),并且仍然可以像单元格一样循环。仅供参考:这在内存方面效率极低。每个矩阵的开销为114字节(从R2017a开始,不确定最近是否发生了变化)。因此,一个只有一个双精度值的矩阵占用122字节。因此,每个单元格都是单个值的单元格数组,或者每个元素都是单个值的结构数组,每个元素至少占用122字节(加上单元格数组或结构在此之上添加的任何开销)。因此,您使用的不是每个元素8个字节,而是122个字节,是原来的15倍多。@CrisLuengo:谢谢您的来电!这些信息对我很有帮助。我会记住的。仅供参考:这是非常低效的内存。每个矩阵的开销为114字节(从R2017a开始,不确定最近是否发生了变化)。因此,一个只有一个双精度值的矩阵占用122字节。因此,每个单元格都是单个值的单元格数组,或者每个元素都是单个值的结构数组,每个元素至少占用122字节(加上单元格数组或结构在此之上添加的任何开销)。因此,您使用的不是每个元素8个字节,而是122个字节,是原来的15倍多。@CrisLuengo:谢谢您的来电!这些信息对我很有帮助。我会记住的。@Argyll:The
cellfun
soluti