конкатенация выходных данных arrayfun - PullRequest
0 голосов
/ 22 января 2020

Предполагая, что

outputTemp =

  2×1 cell array

    {122×1 string}
    {220×1 string}

finalOutput является строковым массивом (342x1 string).

есть ли способ сделать следующее

outputTemp = arrayfun(@(x)someFunc(x), someInput, 'UniformOutput', false)';
finalOutput= [outputTemp{1}; outputTemp{2}];

в одной строке?

для минимального примера, someFunc может быть функцией, которая предоставляет имена файлов в папках, предоставленных в someInput.

Ответы [ 2 ]

0 голосов
/ 22 января 2020

Вы можете попробовать следующий код, используя cat() + subsref(), т.е.

finalOutput= cat(1,subsref(arrayfun(@(x)someFunc(x), someInput, 'UniformOutput', false),struct('type', '{}', 'subs', {{:}})));

Пример

S(1).f1 = rand(3,5);
S(2).f1 = rand(6,10);
S(3).f1 = rand(4,2);

cat(1,subsref(arrayfun(@(x) mean(x.f1)',S,'UniformOutput',false),struct('type', '{}', 'subs', {{:}})))

, такой что

ans =

   0.89762
   0.53776
   0.42440
   0.25272
   0.58197
   0.34503
   0.40259
   0.41792
   0.43527
   0.53974
   0.49976
   0.63342
   0.36539
   0.58541
   0.57042
   0.60914
   0.60851
0 голосов
/ 22 января 2020

Краткий ответ: да. Вот MWE:

str1 = ["Test";"Test1";"42"]
str2 = ["new test";"pi = 3"]
C = {str1;str2}

ConCatStr = [C{1};C{2}];

Это должно ответить на вопрос о конкатнации строковых массивов. Обратите внимание, что это возможно только с реальными строками (не с массивами символов). Трудно сказать, что вы делаете заранее, так как нет подробностей о getFilesFilt() и mainFolderCUBX.

РЕДАКТИРОВАТЬ MVE для обновленного вопроса

% function that returns a matrix
fnc = @(x)[x,1];
% anonymous function that returns a vector
fnc2 = @(x)reshape(fnc(x),2,1)

tmp = arrayfun(@(x)fnc(x), rand(10,1),'UniformOutput',false)

Ответ: правильного пути нет. Тем не менее, вы можете немного поиграться и собрать все в одну строку (делая код уродливым и менее эффективным)

tmp = arrayfun(@(x)fnc(x), rand(10,1),'UniformOutput',false);
out = reshape(cell2mat(tmp),numel(cell2mat(tmp)),1);

просто замените tmp на то, что написано с ним.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...