在 Matlab 中将结构转换为双精度类型
Convert struct to double type in Matlab
Glcm(特征提取方法)给我一个 'struct' 类型的输出,而我需要 'double' 类型的输出。我需要一个 'double' 类型作为下一步的输入变量。
所以,我尝试使用下面显示的几个代码对其进行转换。
[gl] = glcm (B);
[gl] = struct2cell (gl);
[gl] = cell2mat (gl);
[fetrain] = double (gl);
代码给了我一个输出,但它是 'complex double' 类型。
是否有更好的方法将'struct'转换为'double'类型?
或将 'complex double' 转换为 'double' 类型?
如有任何帮助和建议,我们将不胜感激。谢谢。
首先,您可以使用 struct2array
.[=25 直接从 struct
转换为 double
,而不是先转换为单元格然后转换为矩阵=]
fetrain = struct2array(gl);
除此之外,"complex 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]);
Glcm(特征提取方法)给我一个 'struct' 类型的输出,而我需要 'double' 类型的输出。我需要一个 'double' 类型作为下一步的输入变量。
所以,我尝试使用下面显示的几个代码对其进行转换。
[gl] = glcm (B);
[gl] = struct2cell (gl);
[gl] = cell2mat (gl);
[fetrain] = double (gl);
代码给了我一个输出,但它是 'complex double' 类型。
是否有更好的方法将'struct'转换为'double'类型?
或将 'complex double' 转换为 'double' 类型?
如有任何帮助和建议,我们将不胜感激。谢谢。
首先,您可以使用 struct2array
.[=25 直接从 struct
转换为 double
,而不是先转换为单元格然后转换为矩阵=]
fetrain = struct2array(gl);
除此之外,"complex 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]);