2

こんにちは私は3次元の行列を持っており、行を列に変換してからすべての列をスタックして、3次元のベクトルを生成しようとしています。

したがって、行1は列1になり、行2は列2になります。次に、列2は列1の下に、列3は列1と2の下になります。寸法も同じに保つ必要があります。

以下のPV_power_output(:、:、K)は、365 x 24 x 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,[]);

ただし、さまざまな位置にある要素をチェックすると、上記は正しくないため、助けがあれば素晴らしいです!

4

1 に答える 1

1

おそらく、あなたの順列は間違っています。なぜなら、それは現状では何もしていないからです。

permute(PV_power_output, 1:3) == PV_power_output

多分あなたは必要です:

permute(PV_power_output, [2 1 3])

私は一般的に、再形成を追跡するのが難しいと感じることがよくあります(特に、3週間後にコードに戻る場合)。したがって、パフォーマンスが重要でない場合は、3Dマトリックスの代わりにここでループを使用することを検討できます。

3Dマトリックスの代わりにセル配列について考えると、形状変更ははるかに簡単になります。

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

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

アップデート:

おそらく、2Dに再形成してみてください。

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

そして、次のようにK番目の列ベクトルにアクセスできます。

vector_K = out(:,K)
于 2012-06-20T17:19:23.710 に答える