2015-06-04 7 views
2

Допустим, у нас есть массив A = ones(2, 2, 2) и другая матрица P = rand(4). Мне интересно, если это возможно, чтобы написать кодВыберите подматрицу и векторизовать в одной команде в MATLAB

temp = A(:, :, 1); 
X = P * temp(:); 

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

X = P * A(:, :, 1)(:); 

но это не работает. Я также пошарил с командой reshape, но не смог заставить ее работать.

Я не мог найти ответ, используя веб-сайт или этот форум. Можно ли делать то, что я ищу?

Спасибо за помощь,

Адриану

ответ

3

Вы могли бы сделать -

[m,n,r] = size(A); 
X = P*reshape(A(:,:,1),m*n,[]) 

Если вы делаете это итеративно по третьему измерению A, т.е. A(:, :, iter), где iter является итератором, вы можете получить все X в векторном формате в таком массиве -

X_all = P*reshape(A,m*n,[]) 
+0

О, это может сработать. Я на самом деле делаю это итеративно, поэтому я мог бы даже исключить цикл for! – aeduG

+0

Да, это было в основном мое предположение! – Divakar

+0

Я просто попробовал, и он работает! Большое спасибо. Это второй раз, когда вы помогли мне с изменением проблемы! Вы являетесь мастером переиздания matlab! – aeduG

1

Рефайп должен работать. Попробуйте сделать это следующим образом:

X = P * reshape(A(:, :, 1), [], 1) 
+0

Спасибо за помощь, это тоже помогло бы мне. Я бы также выбрал ваш ответ правильно, если бы мог выбрать более одного. благодаря – aeduG

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