【问题标题】:Cell Array Manipulation元胞数组操作
【发布时间】:2014-04-08 16:55:46
【问题描述】:

我有许多具有不同格式的元胞数组。有些只包含数字,有些在每个单元格中包含多个数字(每个单元格本身就是一个单元格),有些包含单词,有些在每个单元格中包含几个单词(每个单元格本身就是一个单元格)。现在我有几个问题。

1.假设我有以下矩阵:

A' = [1, 2, 3, 4, 5]

我想在此列中添加一个标题并将其保存在一个新的单元格中:

A2' = {'Header1', 1, 2, 3, 4, 5}

我正在尝试:

A2 = {'Header1'; num2str(A)}

但结果是一个 2*1 单元格数组,其中第一个单元格中包含“Header1”,第二个单元格中包含数字,但我希望每个数字都位于单独的行中!

2) 对于每个单元格中包含多个数字的单元格,假设我有以下内容:

B' = {{1,2,3},{3,4,5},{1,2},1}

我再次希望得到这样的结果:

B2' = {'Header2',{1,2,3},{3,4,5},{1,2},1}

我做了B2 = {'Header2'; num2str(B)}

但我收到错误消息

“cell”类型的输入参数的未定义函数“abs”。

3.最后,我想连接生成的元胞数组并将它们写入一个 excel 文件。我试过了: ForExcel = [char(A), char(B), char(C), char(D)]; filename = 'ForExcel.xlsx'; xlswrite(filename, ForExcel);

但我什么也得不到。 请注意,数组 C 和 D 包含单词,并且每个单元格中可能有多个单词。

【问题讨论】:

    标签: arrays excel matlab cell-array


    【解决方案1】:

    我会尽力回答你的问题:

    1) 在这种情况下,您的串联是错误的。试试这样:

    A = [1, 2, 3, 4, 5]; A2 = [{'Header1'} num2cell(A)]'

    A2 =

    'Header1'
    [1]
    [2]
    [3]
    [4]
    [5]
    

    2) 不能使用 num2str() 函数来转换元胞数组,只能转换矩阵。

    3) 能否对变量 ForExcel 给出更详细的解释?如果您可以在此处复制并粘贴代码,那就太好了。

    问候。

    【讨论】:

    • 谢谢,我编辑了我的问题。 (1) 我希望每个数字都在单独的行中。 (2) xlswrite的第二个参数我加了,这里忘记写了。
    • 好的,没问题。我编辑了我的答案以满足您的更正,但我无法重现您的第三个错误。
    • 现在我正在苦苦思索如何在 excel 中编写第二个单元格数组 (B)
    【解决方案2】:

    对于#1,你需要数字数据是字符串吗?元胞数组的(唯一?)好处是不同类型的数据可以共存。

    A = [1, 2, 3, 4, 5]';
    
    A_cell_array_of_doubles = num2cell(A);
    
    A2 = [{'Header1'}; A_cell_array_of_doubles];
    
    
    A2 = 
    
        'Header1'
        [1]
        [2]
        [3]
        [4]
        [5]
    

    对于 #3,请注意 xlswrite 可以很好地处理这些“混合类型”单元格数组。

    ForExcel = [A2, A2, A2];
    filename = 'ForExcel2.xlsx';
    xlswrite(filename, ForExcel);
    

    好的,棘手的。对于#2,您在单元格中有单元格 - 有没有办法简化这个数据结构?如果不是,那么您可能需要先将所有这些单独的数组 {1,2,3} 和 {3,4,5} 转换为字符串,然后再使用 xlswrite。

    遍历您的顶级数组并在每个元素上使用带有 num2str 的 cellfun 可能会有所帮助:

    A_cell_array_of_strings = cellfun(@num2str,A_cell_array_of_doubles,'UniformOutput',false)
    
    A_cell_array_of_strings = 
    
        '1'
        '2'
        '3'
        '4'
        '5'
    

    【讨论】:

    • 感谢您的聪明回答。 (1)第一个问题解决了,谢谢 (2)我创建了一个等于double数组大小的空单元格:strings=cell(size(B));然后我做了for i=1:size(B,1) strings{i}=cellfun(@num2str, B,'UniformOutput',false) end。结果是字符串是一个 99*1 (99=size(B,1)) 并且每个单元格是另一个包含数字的 99*1 单元格!我觉得我做错了什么
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多