在Matlab中将struct转换为double类型

Ana*_*Ain 1 double matlab struct matlab-struct

GLCM(特征提取方法)给我“结构”类型的输出,而我需要“双重”类型的输出。我需要一个“双精度”类型作为下一步的输入变量。

在此处输入图片说明

因此,我尝试使用下面显示的几个代码对其进行转换。

[gl] = glcm (B);
[gl] = struct2cell (gl);
[gl] = cell2mat (gl);
[fetrain] = double (gl);
Run Code Online (Sandbox Code Playgroud)

该代码给了我一个输出,但是它是'complex double'类型的。

在此处输入图片说明

有没有更好的方法可以将“ struct”转换为“ double”类型?

还是将“复杂双精度”转换为“双精度”类型?

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

Sue*_*ver 6

首先,您可以直接从a struct转换为doubleusing ,而不是先转换为单元格然后转换为矩阵struct2array

fetrain = struct2array(gl);
Run Code Online (Sandbox Code Playgroud)

顺便说一句,“复杂double”和“之间”没有区别double。它们都是type double

class(1i)
% double
Run Code Online (Sandbox Code Playgroud)

您可以real用来获取复数的实分量,或者abs如果需要它的大小。

real(1+1i)
%   1

abs(1+1i)
%   1.4142
Run Code Online (Sandbox Code Playgroud)

在您的情况下,这将是:

fetrain_real = real(fetrain);
fetrain_mag = abs(fetrain);
Run Code Online (Sandbox Code Playgroud)

更新资料

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

fetrain = struct2array(gl);

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