【问题标题】:How to insert a number to every cell of a cell array in Matlab?如何在Matlab中向单元格数组的每个单元格插入一个数字?
【发布时间】:2013-02-17 08:16:47
【问题描述】:

我有一个像这样的单元格数组:

    a = {[1 2 3]; [4 5]; [6 7 8 9]};

并希望在每个单元格的开头插入例如 10 以具有以下内容:

    >> a{:}

    ans =

        10     1     2     3

    ans =

        10     4     5

    ans =

        10     6     7     8     9

是否可以在没有任何 for 循环的情况下做到这一点?

【问题讨论】:

    标签: matlab cell-array


    【解决方案1】:

    您可以将CELLFUN 与匿名函数一起使用:

    b = cellfun(@(x)[10 x],a,'UniformOutput',0)
    

    为了回答@tmpearce 评论,我使用了一个简单的脚本来测量运行时间:

    a = {[1 2 3]; [4 5]; [6 7 8 9]};
    tic
    a = cellfun(@(x)[10 x],a,'UniformOutput',0)
    toc
    a = {[1 2 3]; [4 5]; [6 7 8 9]}; 
    tic
    for ii=1:numel(a)
        a{ii} = [10 a{ii}];
    end
    toc
    

    结果:

    Elapsed time is 0.002622 seconds.
    Elapsed time is 0.000034 seconds.
    

    【讨论】:

    • 这确实避免了循环,尽管它可能值得检查是否比简单循环有速度优势 - cellfun/arrayfun 通常非常慢
    • 在如此微不足道的数据上进行比较几乎毫无意义
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-10
    • 1970-01-01
    • 1970-01-01
    • 2015-09-13
    相关资源
    最近更新 更多