Matlab 如何将包含int 32和double的单元格数组更改为double矩阵?

Matlab 如何将包含int 32和double的单元格数组更改为double矩阵?,matlab,double,cell,int32,Matlab,Double,Cell,Int32,我有一个结构,我想把它变成一个矩阵。所以我得到了Cell2MatStruct2Cell。但是Struct2cell给了我 6×1 cell array {1100×1 int32 } {1100×1 int32 } {1100×1 int32 } {1100×1 int32 } {1100×1 double} {1100×1 double} cell2matstruct2celld给了我一个错误: 输入单元格数组的所有内容必须具有相同的数据类型 所以我的问题是,我如何才能把它们全部转换成双倍

我有一个结构,我想把它变成一个矩阵。所以我得到了Cell2MatStruct2Cell。但是Struct2cell给了我

6×1 cell array

{1100×1 int32 }
{1100×1 int32 }
{1100×1 int32 }
{1100×1 int32 }
{1100×1 double}
{1100×1 double}
cell2matstruct2celld给了我一个错误:

输入单元格数组的所有内容必须具有相同的数据类型


所以我的问题是,我如何才能把它们全部转换成双倍?或者如何最终得到矩阵?

您可以使用cellfun来投射单元格的每个元素,cellfun基本上是一个隐藏的for循环:

%Dummy data
s.a = int16([1:4])
s.b = linspace(0,1,4)

%struct -> mat
res = struct2cell(s);
res = cellfun(@double,res,'UniformOutput',0) %cast data type to double
res = cell2mat(res)

您可以使用cellfun投射单元格的每个元素,cellfun基本上是一个隐藏的for循环:

%Dummy data
s.a = int16([1:4])
s.b = linspace(0,1,4)

%struct -> mat
res = struct2cell(s);
res = cellfun(@double,res,'UniformOutput',0) %cast data type to double
res = cell2mat(res)

我们可以做一个简单的循环

f = fieldnames( d );
nf = numel( f );
output = cell( nf, 1 );
for ii = 1:nf
    output{ii} = double( d.(f{ii}) );
end
output = [output{:}];

我们可以做一个简单的循环

f = fieldnames( d );
nf = numel( f );
output = cell( nf, 1 );
for ii = 1:nf
    output{ii} = double( d.(f{ii}) );
end
output = [output{:}];
可以使用循环结构中的所有字段,并将它们转换为第一个字段。然后可以在修改后的结构上使用和。或者,您可以直接从structfun获取单元格数组,并将这些单元格内容连接到一个数组中:

>> s = struct('a', int32(1:10).', 'b', pi.*ones(10, 1));  % Sample data
>> mat = cell2mat(structfun(@(v) {double(v)}, s).');

mat =

   1.000000000000000   3.141592653589793
   2.000000000000000   3.141592653589793
   3.000000000000000   3.141592653589793
   4.000000000000000   3.141592653589793
   5.000000000000000   3.141592653589793
   6.000000000000000   3.141592653589793
   7.000000000000000   3.141592653589793
   8.000000000000000   3.141592653589793
   9.000000000000000   3.141592653589793
  10.000000000000000   3.141592653589793
可以使用循环结构中的所有字段,并将它们转换为第一个字段。然后可以在修改后的结构上使用和。或者,您可以直接从structfun获取单元格数组,并将这些单元格内容连接到一个数组中:

>> s = struct('a', int32(1:10).', 'b', pi.*ones(10, 1));  % Sample data
>> mat = cell2mat(structfun(@(v) {double(v)}, s).');

mat =

   1.000000000000000   3.141592653589793
   2.000000000000000   3.141592653589793
   3.000000000000000   3.141592653589793
   4.000000000000000   3.141592653589793
   5.000000000000000   3.141592653589793
   6.000000000000000   3.141592653589793
   7.000000000000000   3.141592653589793
   8.000000000000000   3.141592653589793
   9.000000000000000   3.141592653589793
  10.000000000000000   3.141592653589793

@gnovice彻底检查了我的答案,你是对的,我没有意识到that@gnovice仔细检查我的答案,你是对的我没意识到