Объединение части многомерных матриц в Matlab

Я имею дело с данными изображения, и у меня есть 240 изображений, каждое из которых состоит из 5 вкладов каналов размером 231 на 384. Эта матрица теперь имеет размер (240 231 384,5), и я хотел бы иметь это как (231 * 240 384,5). Я не могу «изменить» его, не искажая данные. Как мне это сделать?


person user3037463    schedule 26.11.2013    source источник
comment
Почему бы не просто reshape(data, 240*231,384,5)?   -  person Luis Mendo    schedule 26.11.2013
comment
Я не понимаю, почему вы хотите это сделать? Средства первого измерения ничего не значат после ?   -  person Vuwox    schedule 26.11.2013
comment
@Maria: Что вы ожидаете от M (2,:,:,:)? Второй ряд первой картинки или первый ряд второй картинки?   -  person Daniel    schedule 26.11.2013


Ответы (2)


Вот мое предположение о том, что вы пытаетесь сделать

test = [1:16]; % sample data
test1 = reshape(test, 4, 4); % rearrange to 4x4
% this has a vertical arrangement which is prob not what you have

[m, n] = size(test1); % get dims
r = 2; % horizontal width / numb of cols
% this prob closer to what you have
test2 = test1(:,1:r)'  % flip to horizontal order
test3 = reshape(test2, m*r, 1) % rearrange to vertical
person athypes    schedule 26.11.2013
comment
Как сказал Дэниел Р., включите пример вывода, который вы ищете. Непонятно, что вы пытаетесь сделать. О каких искажениях идет речь? Как выглядят ваши данные? Можете ли вы дать нам меньшую часть вашего кода с ожидаемым результатом? - person athypes; 26.11.2013

Учитывая матрицу:

n1 = 240; n2 = 231; n3 = 384; n4 = 5;
A = randn(n1, n2, n3, n4);

Я предполагаю, что решение, которое вы ищете, либо предложено Луисом выше:

B = reshape(A, n1 * n2, n3, n4);

or

C = reshape(permute(A, [2 1 3 4]), n1 * n2, n3, n4);

В противном случае вы должны лучше объяснить, в чем ваша проблема.

person randomatlabuser    schedule 26.11.2013