2016-12-28 7 views
1

У меня есть массивКак добавить внутри ячеек в массив ячеек без циклов?

A={1 6 31 65; 1 38 53 4}; 

Я хочу, чтобы массив ячеек в виде

C={[1 1] [6 6] [31 31] [65 65];[1 1] [38 38] [53 53] [4 4]}; 

Один из способов сделать это с помощью цикла:

for count=1:2 
    for i=1:4 
     for j=1:2 
      C{i,j}(count)=A(i,j); 
     end 
    end 
end 

Как я могу это сделать без циклов и улучшения временной сложности?

Редактировать: Это не так для count = 2, у меня есть приложение, где count достигает 85. Цикл значительно снижает эффективность. И переход на более высокие размерные матрицы также неэффективен.

+0

У вас нет. Зачем вам нужен массив ячеек? Ячейки содержат массивы одинакового размера. – excaza

ответ

0

Один из способов сделать это было бы использовать cellfun создать каждый новый элемент

C = cellfun(@(x)ones(1,2) * x, A, 'UniformOutput', false); 

Как @excaza указал, хотя, у вас есть данные одинакового размера, так что рекомендуется использовать мульти- вместо этого. Вы могли бы (например) просто воспроизвести данные по третьему измерению вместо

C = repmat(A, [1 1 2]); 
+0

Обратите внимание, что 'cellfun', скорее всего, будет медленнее, чем явный цикл в случаях, когда вход [функция символьной функции] (https://www.mathworks.com/help/matlab/ref/cellfun.html#inputarg_func) не поддерживается. – excaza

+0

@excaza В этом случае, хотя это может быть быстрее, так как в примере в вопросе нет предварительного выделения каждого элемента массива ячеек. – Suever

Смежные вопросы