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 有没有办法将双数组转换为结构数组?_Arrays_Matlab_Struct - Fatal编程技术网

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