Как упростить этот код MATLAB, который вызывает функцию на выходе функции в массиве ячеек double? - PullRequest
1 голос
/ 11 марта 2011

У меня есть этот кусок кода, который работает, но довольно громоздко.У него есть один аргумент, который является массивом ячеек, и в каждой ячейке есть вектор 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 Ответ

4 голосов
/ 11 марта 2011

Поскольку векторы в вашей ячейке имеют одинаковый размер, вы можете свернуть их в матрицу / вектор.То, как вы выполняете операции в каждой ячейке, эквивалентно тому, как вы делаете это в супервекторе.Так что вместо cellfun вы можете сделать

dummyVector=cell2mat(cell_of_double);
output=sum(log(dummyVector));
...