Код
Q = mat2cell(num2cell([a b]),ones(1,numel(a)),2)
Пример
Код с отображением ввода и вывода
a = [2; 3; 4]; %// Inputs
b = [1; 5; 8];
Q = mat2cell(num2cell([a b]),ones(1,numel(a)),2); %// Output
celldisp(Q) %// Display results
Вывод при запуске кода
Q{1}{1} =
2
Q{1}{2} =
1
Q{2}{1} =
3
Q{2}{2} =
5
Q{3}{1} =
4
Q{3}{2} =
8
Сравнительный анализ
Функция для метода цикла
function out = loop1(a,b)
out = cell(size(a,1),1);
for i=1:size(out,1)
out{i}{1}=a(i,:);
out{i}{2}=b(i,:);
end
return;
Функция векторного метода
function out = vec1(a,b)
out = mat2cell(num2cell([a b]),ones(1,numel(a)),2);
return;
Код сравнительного анализа
N_arr = [50 100 200 500 1000 2000 5000 10000 50000]; %// array elements for N
timeall = zeros(2,numel(N_arr));
for k1 = 1:numel(N_arr)
N = N_arr(k1);
a = randi(9,N,1);
b = randi(9,N,1);
f = @() loop1(a,b);
timeall(1,k1) = timeit(f);
clear f
f = @() vec1(a,b);
timeall(2,k1) = timeit(f);
clear f
end
%// Graphical display of benchmark results
figure,
hold on
plot(N_arr,timeall(1,:),'-ro')
plot(N_arr,timeall(2,:),'-kx')
legend('Loop Method','Vectorized Method')
xlabel('Datasize (N) ->'),ylabel('Time(sec) ->')
Результаты

Выводы
Похоже, векторизованный метод — это то, что нужно, поскольку он показывает почти удвоенную производительность (с точки зрения времени выполнения) по сравнению с циклическим подходом в широком диапазоне размеров данных.
person
Divakar
schedule
16.07.2014
Q(сохранив его структуру идентичной тому, как он был у вас), и это противоречит вашему циклу, в котором есть ячейки в ячейках. Есть ли причина иметь внутренние матрицы в виде ячеек? то есть могут ли эти скаляры когда-либо не быть скалярами? А также почему бы просто неQ = [a,b]забыть о ячейках? - person Dan   schedule 16.07.2014Q = mat2cell([a b].',2,ones(1,numel(a))).'? - person Divakar   schedule 16.07.2014Q={{2}{1};{3}{5};{4}{8}}- person Iman   schedule 16.07.2014mat2cell([a b].',[1 1],ones(1,numel(a))).'- person Divakar   schedule 16.07.2014Q? - person Dan   schedule 16.07.2014a=(1:100000)'; b=(1:100000)';tic Q=cell(size(a,1),1); for i=1:size(Q,1) Q{i}{1}=a(i,:); Q{i}{2}=b(i,:); end toc Elapsed time is 0.372703 seconds.tic Q=mat2cell(mat2cell([a b].',[1 1],ones(1,numel(a))).',ones(1,size(a,1)).'); toc Elapsed time is 0.717828 seconds.- person Iman   schedule 16.07.2014