【问题标题】:Convert cell array with sub cells into numeric array将具有子单元格的单元格数组转换为数值数组
【发布时间】:2019-04-19 10:08:43
【问题描述】:

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

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

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

如何创建数值数组,例如

A = [11,13,…]

cell2mat 函数似乎只适用于“第一级”元胞数组: cell2mat 不支持包含元胞​​数组或对象的元胞数组。

【问题讨论】:

    标签: matlab cell


    【解决方案1】:

    您可以使用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) 将其转换为双精度数。

    【讨论】:

    • 嗨 rinkert,非常感谢您的回复。完美运行!这很有帮助。我终于明白如何使用 cellfun 功能了。非常便利。一切顺利,C
    【解决方案2】:

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

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

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

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

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

    【讨论】:

    • 这不起作用,因为A 中的每个单元格都包含一个单元格,而不是您的示例中的字符数组。
    【解决方案3】:

    我不确定我是否完全理解您的问题。如果我没记错的话,你说的是像下面的asd 这样的元胞数组

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

    如果我正确理解了您的目标,我认为以下内容可以很好地完成

    A=char([asd{:}])
    

    然后,如果您想将字符串转换为数字(这不适用于我的测试,但可能适用于您的字符串),只需在这个新向量上使用 str2num

    【讨论】:

      【解决方案4】:

      A转换成comma-separated list的单元格,然后horizontally concatenate这些单元格最后应用str2double

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

      【讨论】:

      • 亲爱的 Sardar,str2double 函数也很有效。感谢您的帮助!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-07
      • 1970-01-01
      • 1970-01-01
      • 2021-04-22
      • 2017-05-22
      • 2012-06-14
      • 1970-01-01
      相关资源
      最近更新 更多