# Convert 3 dimensional matrix to vector (rows to columns)

127 views (last 30 days)
Andrew Alkiviades on 20 Jun 2012
Hi I have a 3 dimensional matrix that I am trying to convert the rows to columns and then stack all the columns to generate a vector that will have the three dimensions. I am struggling with the coding of this
So far I have
PV_power_output(:,:,K) = real((Vmpp_(:,:,K).*Impp_(:,:,K))*inverter_efficiency)/1000; % Power output in kW
PV_energy(:,:,K) = sum(sum(PV_power_output(:,:,K))) ; % Energy output in kWh
PV_rows_to_columns(:,:,K) = PV_power_output(:,:,K)';
PV_power_output is a 365x24x3 matrix and I am trying to convert it to a 8760x1x3 vector
Thanks

Thomas on 20 Jun 2012
doc reshape
out = reshape(PV_power_output,8760,1,3);
Warning: read the reshape help document thoroughly as it does columnwise reshape..

Andrew Alkiviades on 20 Jun 2012
I get an error on the perm dims(1:2) line of
"Improper assignment with rectangular empty matrix"
Cant I just transpose the matrix (for each dimension) and then vectorize it using the colon (:) somehow?
Andrew Alkiviades on 20 Jun 2012
What does the (1:2) represent?
Walter Roberson on 20 Jun 2012
Sorry should be
permdims([1 2]) = permdims([2 1]);
These are indices into permdims, which in turn is 1 to the dimension number, so the result is to get
[2 1 3 4 5 6 .... dimension number]

Andrew Alkiviades on 20 Jun 2012
I have managed to get it working for K = 1
I have transposed the matrix then stacked the columns. However, I need to code for the three sets of matrices - at the moment I can only access K = 1 Does anyone have any ideas on how to modify the code for the K = 2 and 3?
PV_power_output(:,:,K) = real((Vmpp_(:,:,K).*Impp_(:,:,K))*inverter_efficiency)/1000; % Power output in kW
PV_energy(:,:,K) = sum(sum(PV_power_output(:,:,K))) ; % Energy output in kWh
PV_out(:,:,K) = [real((Vmpp_(:,:,K).*Impp_(:,:,K))*inverter_efficiency)/1000]'; % Power output in kW
out = PV_out(:);