2011-03-11 36 views
1

我有这段代码正在工作,但有点麻烦。它有一个参数,它是一个单元阵列,在每个单元中是一个双向量。所有载体具有相同的大小。我需要在这个变量的函数输出上调用一个函数。例如,在这里,我在双向量中的所有成员上调用log(),然后调用sum()来总和一切。在实际的代码中,单元的数量要大得多。有没有一种方法来简化这个不使用循环?谢谢!如何简化这个在双精度单元数组上调用函数输出函数的MATLAB代码?

>> 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 

回答

4

由于您的单元格中的矢量大小都相同,因此可以将它合并到矩阵/矢量中。你在每个单元格上进行操作的方式相当于在超向量上进行操作。因此,而不是cellfun,可以做

dummyVector=cell2mat(cell_of_double); 
output=sum(log(dummyVector)); 
+2

由于'dummyVector'可以是一个列向量*或*的矩阵(取决于单元阵列是否为1×2或2×1),则应该使用[冒号运算符](http://www.mathworks.com/help/techdoc/ref/colon.html)将其重新整形为列向量以保证安全:'output = sum(log(dummyVector(:) ));' – gnovice 2011-03-11 19:54:25

+0

感谢你们俩! – 2011-03-11 21:35:05

相关问题