如何将由int 32和double组成的单元格数组更改为doubles矩阵?

时间:2019-02-21 15:59:56

标签: matlab double cell int32

我有一个结构想要将其更改为矩阵。所以我得到了cell2mat(struct2cell(d))。但是struct2cell(d)给了我

6×1 cell array

{1100×1 int32 }
{1100×1 int32 }
{1100×1 int32 }
{1100×1 int32 }
{1100×1 double}
{1100×1 double}

cell2mat(struct2cell(d))给我错误:

  

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

所以我的问题是如何将它们全部转换为两倍?还是最后我怎么能得到矩阵?

3 个答案:

答案 0 :(得分:4)

您可以使用 double_2nd (x:xs) | length xs == 0 = [x] | otherwise = x : (2 * head xs) : double_2nd (tail xs) (基本上是隐藏的for循环)来转换单元格的每个元素:

cellfun

答案 1 :(得分:2)

您可以使用structfun遍历结构中的所有字段,然后首先将它们转换为double。然后,您可以在修改后的结构上使用cell2matstruct2cell。另外,您可以直接从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

答案 2 :(得分:1)

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

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