2011-03-11 40 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

相關問題