如何简化这个在double的单元格数组上调用函数输出函数的MATLAB代码?

时间:2011-03-11 19:24:46

标签: arrays matlab cell

我有这段代码正在运行,但有点麻烦。它有一个参数,它是一个单元格数组,每个单元格中都是double的向量。所有载体都具有相同的大小。我需要在这个变量的函数输出上调用一个函数。例如,在这里我在double向量中的所有成员上调用log(),然后调用sum()来对所有内容求和。在实际代码中,单元格的数量要大得多。有没有办法在不使用循环的情况下简化此操作?谢谢!

>> cell_of_double{:}

ans =

    0.3140
    0.7160
    0.6925
    0.4265
    0.8875
    0.5785
    0.7185
    0.3275
    0.3030
    0.5745
    0.7435
    0.6930
    0.7290
    0.5660
    0.2750


ans =

    0.3620
    0.3580
    0.4760
    0.5560
    0.3245
    0.3785
    0.8805
    0.7600
    0.7580
    0.5435
    0.4985
    0.5830
    0.6155
    0.8010
    0.6150

>> cell_of_double

cell_of_double = 

    [15x1 double]
    [15x1 double]

>> sum(cellfun(@sum, cellfun(@(x) sum(arrayfun(@log, x)), cell_of_double(:), 'UniformOutput', false)))

ans =

  -18.6004

1 个答案:

答案 0 :(得分:4)

由于单元格中的向量大小相同,因此可以将其折叠为矩阵/向量。您在每个单元格上执行操作的方式等同于在超级向量上执行操作。因此,您可以执行

而不是cellfun
dummyVector=cell2mat(cell_of_double);
output=sum(log(dummyVector));