将具有子单元格的单元格数组转换为数值数组

时间:2019-04-19 10:08:44

标签: matlab cell

假设我有A,它是一个64x1的单元格数组。

64个单元格中的每个单元格都包含另一个带有字符串的单元格(字符串是数字,即11

A{1, 1}{1, 1} = ’11’ (char)
A{2, 1}{1, 1} = ’13’ (char)

如何创建数字数组,例如

A = [11,13,…]

cell2mat函数似乎仅在“第一级”单元格数组上起作用: cell2mat不支持包含单元格数组或对象的单元格数组。

4 个答案:

答案 0 :(得分:0)

这很简单,但是您需要将其分为两个步骤。假设我们有一个简单的1x4字符串数组:

A= {'11','13','15','17'};

要进行转换,您需要将内容存储在临时变量S中,然后使用sscanf生成最终结果:

S = sprintf('%s ', A{:});
Result = sscanf(S, '%f')

唯一的问题是它将是列向量。如果您需要连续使用,则只需transpose(Results)

答案 1 :(得分:0)

我不确定我是否完全理解您的问题。如果我做对了,那么您在谈论下面的像asd这样的单元格数组

asd=cell(61,1);
for ii=1:64
   asd{ii}={['test',num2str(ii)]}
end

如果我正确理解了您的目标,我认为下面的方法会做得很好

A=char([asd{:}])

然后,如果您要将字符串转换为数字(这对我的测试不起作用,但可能对您的字符串有用),只需在此新向量上使用str2num

答案 2 :(得分:0)

您可以使用cellfunA中每个单元格的内容转换为两倍。

A{1, 1}{1, 1} = '11';
A{2, 1}{1, 1} = '13';

A_array = cellfun(@(a) str2double(a), A)

该函数的分解:@(a)A的每个单元格的内容传递给变量a,该变量可以使用str2double(a)转换为double。

答案 3 :(得分:0)

A转换为comma-separated list个单元格,然后horizontally concatenate个这些单元格并最终应用str2double;

A = str2double([A{:}]);