2012-06-20 3 views
2

Привет У меня есть трехмерная матрица, которую я пытаюсь преобразовать строки в столбцы, а затем складываю все столбцы для генерации вектора, который будет иметь три измерения.преобразовать трехмерную матрицу матрицы в трехмерный вектор столбца

поэтому, строка 1 становится столбец 1, строка 2 будет столбец 2 и т.д. И затем, колонка 2 идет в колонке 1, столбец 3 в колонке 1 и 2. Также нужно сохранить размеры тот же

PV_power_output (:,:, к) ниже 365 х 24 х 27 матрицы, которая должна стать 8760x1 вектором следующей последовательности определения местоположения упомянутой выше

Я борюсь с кодировкой этого

до сих пор я

PV_power_output(:,:,K) = real((Vmpp_(:,:,K).*Impp_(:,:,K))*inverter_efficiency)/1000; 

permdims = 1 : ndims(PV_power_output); 
out = reshape(permute(PV_power_output, permdims),8760,1,[]); 

Однако при проверке элементов в разных положениях вышеуказанное неверно, поэтому любая помощь будет отличной!

+0

Вы пытались транспонировать перед изменением формы? – ypnos

ответ

1

Возможно, ваш переставить неправильно, потому что, как он стоит это не делает ничего:

permute(PV_power_output, 1:3) == PV_power_output 

может быть, что вам нужно:

permute(PV_power_output, [2 1 3]) 

целом я часто нахожу перекроить трудно следовать (особенно, когда вы вернитесь к коду через три недели), поэтому, если производительность не является критичной, вы можете рассмотреть возможность использования здесь цикла для вашей 3D-матрицы.

Вы могли бы думать о массиве ячеек вместо 3d матрицы, а затем ваш Reshape гораздо более прямо вперед:

PV_power_output{K} = real((Vmpp_(:,:,K).*Impp_(:,:,K))*inverter_efficiency)/1000; 

vector = reshape(PV_power_output{K},8760,1); 

Update:

Возможно попробовать изменения формы в 2D:

out = reshape(permute(PV_power_output, [2 1 3]), 8760,27); 

А затем вы можете получить доступ к Kth столбец вектора как:

vector_K = out(:,K) 
+0

Мне удалось получить каждый элемент в правильном положении, используя приведенный ниже код. Как я могу изменить код, чтобы иметь возможность «получить доступ» K = 2 и K = 3 из – user643469

+0

PV_power_output (:,:, K) = real (((Vmpp _ (:,:, K). * Impp_ (:,) :, K)) * inverter_efficiency)/1000); PV_out (:,:, K) = (real ((Vmpp _ (:,:, K). * Impp _ (:,:, K)) * inverter_efficiency)/1000) '; out = PV_power_output (:); – user643469