在Matlab中将struct转换为double类型

时间:2016-05-25 14:51:02

标签: matlab struct double matlab-struct

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

enter image description here

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

[gl] = glcm (B);
[gl] = struct2cell (gl);
[gl] = cell2mat (gl);
[fetrain] = double (gl);

代码给我一个输出,但它是'复杂的双'类型。

enter image description here

有没有更好的方法将'struct'转换为'double'类型?

或者将“复杂双倍”转换为“双重”类型?

非常感谢任何帮助和建议。谢谢。

1 个答案:

答案 0 :(得分:4)

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

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 nData的矩阵,那么您可以执行以下操作:

fetrain = struct2array(gl);

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