【问题标题】:Convert struct to double type in Matlab在 Matlab 中将结构转换为双精度类型
【发布时间】:2016-05-25 14:51:02
【问题描述】:

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

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

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

代码给了我一个输出,但它是“复双”类型。

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

或者将'complex double'转换为'double'类型?

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

【问题讨论】:

  • struct2array怎么样?

标签: matlab struct double matlab-struct


【解决方案1】:

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

fetrain = struct2array(gl);

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

【讨论】:

  • 谢谢@Suever 的解释,居然这么简单。
  • 但是等一下@Suever,矩阵会发生什么,它给出的值 =1x3222 double ,它应该是 22x601(字段 x 总数据)。看看我在上面分享的变量图片。它必须是精确的,因为我需要使用它来使用人工神经网络进行训练。希望你能帮忙。谢谢。
  • 您能否解释更多,我收到此错误“未定义函数 'fieldnames' for input arguments of type 'double'” 然后,我尝试定义字段。有了这个:fields = fieldnames (fetrain); >> fetrain = permute(reshape(fetrain, [], numel(fields(gg)), numel(gg)), [2 1 3]);但是得到这个错误:“下标索引必须是真正的正整数或逻辑。”感谢@Suever
猜你喜欢
  • 2015-09-13
  • 1970-01-01
  • 2016-03-13
  • 1970-01-01
  • 1970-01-01
  • 2015-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多