Matlab中struct到double类型的转换

Matlab中struct到double类型的转换,matlab,struct,double,matlab-struct,Matlab,Struct,Double,Matlab Struct,Glcm(特征提取方法)给我一个“struct”类型的输出,而我需要“double”类型的输出。我需要一个'double'类型作为下一步的输入变量 所以,我尝试使用下面显示的几个代码来转换它 [gl] = glcm (B); [gl] = struct2cell (gl); [gl] = cell2mat (gl); [fetrain] = double (gl); 代码给了我一个输出,但它是“复杂双精度”类型 是否有更好的方法将“struct”转换为“double”类型 或者将“复杂双精

Glcm(特征提取方法)给我一个“struct”类型的输出,而我需要“double”类型的输出。我需要一个'double'类型作为下一步的输入变量

所以,我尝试使用下面显示的几个代码来转换它

[gl] = glcm (B);
[gl] = struct2cell (gl);
[gl] = cell2mat (gl);
[fetrain] = double (gl);
代码给了我一个输出,但它是“复杂双精度”类型

是否有更好的方法将“struct”转换为“double”类型

或者将“复杂双精度”转换为“双精度”类型


任何帮助和建议都将不胜感激。谢谢。

首先,您可以使用
struct2array
直接从
struct
转换为
double
,而不是先转换为单元格再转换为矩阵

fetrain = struct2array(gl);
除此之外,“复杂的
double
”和
double
之间没有区别。它们都是类型
double

class(1i)
% double
您可以使用
real
获取复数的实数分量,如果需要复数的大小,也可以使用
abs

real(1+1i)
%   1

abs(1+1i)
%   1.4142
在您的情况下,这将是:

fetrain_real = real(fetrain);
fetrain_mag = abs(fetrain);
更新

默认情况下,
struct2array
水平连接数据。如果希望数据是一个矩阵,即
nFields x nda
,则可以执行以下操作:

fetrain = struct2array(gl);

% Reshape to be nFields x nData
fetrain = permute(reshape(fetrain, [], numel(fieldnames(gl)), numel(gl)), [2 1 3]);

使用
struct2array
如何?感谢您的解释@Suever,令人惊讶的是,它如此简单。但是@Suever,矩阵会发生什么情况,它给出的值是=1x322的两倍,应该是22x601(字段x总数据)。看看我在上面分享的变量图片。它必须精确,因为我需要用它来训练人工神经网络。希望你能帮忙。谢谢。您能解释一下吗?我遇到了一个错误“未定义函数'fieldnames',用于'double'类型的输入参数”,然后,我尝试定义字段。使用此选项:fields=fieldnames(fetrain);>>fetrain=permute(重塑(fetrain,[],numel(fields(gg)),numel(gg)),[2 1 3]);但是得到这个错误:“下标索引必须是实正整数或逻辑数。”在@Suever之前谢谢