Как я могу создать 3D-массив путем трафарета столбцов 2D-массива в MATLAB?

Предположим, у меня есть двумерный массив с именем A. Я хочу создать трехмерный массив с именем B, чьи "страницы" представляют собой выбранные столбцы трафарета, перемещающегося по A, столбец за столбцом. Например, первая страница B может быть 1-м, 3-м и 5-м столбцами A. Тогда вторая страница будет 2-м, 4-м и 6-м столбцами A и т. Д.

У кого-нибудь есть эффективный способ сделать это в MATLAB?

Спасибо!

1 ответ

Решение

Я предполагаю, что вы ищете это -

%%// Given 2D array
A = randi(10,4,12)

t1 = reshape(A,size(A,1)*2,[]);
t2 = reshape(t1',size(A,2)/2,[],2); %%//'
B = permute(t2,[2 1 3]) %%// Output 3D array

Выход -

A =

     5    10     3     5     6     8     4     3     8    10     8     7
    10     8     3     7     6    10     9     2     7     8     8     5
    10     4     7     8     6     4     5     4     1     1     3     7
     7     7     6     6     1    10     5     8     9     4     3     3


B(:,:,1) =

     5     3     6     4     8     8
    10     3     6     9     7     8
    10     7     6     5     1     3
     7     6     1     5     9     3


B(:,:,2) =

    10     5     8     3    10     7
     8     7    10     2     8     5
     4     8     4     4     1     7
     7     6    10     8     4     3

Конечно, есть альтернативный прямой подход для этого особого случая -

B(:,:,1)=A(:,1:2:end);
B(:,:,2)=A(:,2:2:end);
Другие вопросы по тегам