Есть ли неитеративный эквивалент этого выражения в MATLAB? - PullRequest
3 голосов
/ 07 марта 2011

Выражение:

for i=1:n
    X(:,i) = [P{i}(:)];
end

где X - матрица DxN, а P - массив ячеек.

Ответы [ 3 ]

3 голосов
/ 07 марта 2011
reshape(cat(3,P{:}),[numel(P{1}) n])

Конечно, вышеприведенное решение просто для удовольствия. Я бы порекомендовал профилировать оба решения и использовать только одно, если оно имеет значительное преимущество в производительности.

Обслуживание и удобочитаемость также являются очень важными факторами, которые необходимо учитывать при написании кода.

1 голос
/ 07 марта 2011

Если вы получили массив ячеек с помощью mat2cell, возможно, вы захотите разместить блоки изображения в столбцах массива X.Это можно сделать за один шаг, используя команду IM2COL

%# rearrange the large array so that each column of X
%# corresponds to the 4 pixels of each 2-by-2 block
X = im2col(largeArray,[2 2],'distinct');
1 голос
/ 07 марта 2011

Вы можете сойти с рук:

P{1} = [ 1 2; 3 4];
P{2} = [ 7 8; 9 10];
P{3} = [ 11 12; 13 14];
X = [P{:}]

X =

     1     2     7     8    11    12
     3     4     9    10    13    14

Затем изменить форму (), чтобы добраться туда, куда вы хотите.

...