我有这段代码正在运行,但有点麻烦。它有一个参数,它是一个单元格数组,每个单元格中都是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
答案 0 :(得分:4)
由于单元格中的向量大小相同,因此可以将其折叠为矩阵/向量。您在每个单元格上执行操作的方式等同于在超级向量上执行操作。因此,您可以执行
而不是cellfun
dummyVector=cell2mat(cell_of_double);
output=sum(log(dummyVector));