2016-06-28 5 views
0

新しい3Dマトリックスを生成して、古い3Dマトリックスからプロット輪郭を生成しようとしています。新しいマトリックスは、ステップに応じたスライスの合計です(各ステップを合計します)。特定の条件で古い3Dマトリックスから新しい3Dマトリックスを生成します。

新しい行列スライス1-10は、新しい行列の スライス11が新しいマトリックス上 スライス12が古いマトリックスからスライス2+12など

になります古いマトリックスからスライス1+11になります古いマトリックスと同じになります私はステップ達するまで スライス22新しい行列スライス222+12+22古いマトリックスからスライスなどになります古い行列から1+11+21スライスになるスライス21新しい行列スライス21に到達します私はスライス31に到達したときに210

新しい行列スライス31は古い行列から1+11+21+31スライスになりますので、その後

に、私は、各スライスのために輪郭をプロットしようとしています。これは私が50輪郭プロットを持っていることを意味します

私は以下のコードを使用しましたが、正しく動作しません。

clc; 
clear; 
A=rand(20,20,50); 
[m,n,k] = size(A); 
Total_A = reshape(cumsum(A,2),m,n,k); 
[x,y]= meshgrid(linspace(0,2),linspace(0,2)); 
for ii=1:50 
contour(x,y,Total_A(:,:,ii)); 
end 

答えて

1

ソリューション

次のアプローチを使用することができます。

[x,y]= meshgrid(linspace(0,2,size(outMat,1)),linspace(0,2,size(outMat,2))); 
for ii=1:size(outMat,3) 
    figure,contour(x,y,outMat(:,:,ii)); 
end 

結果:輪郭部分にについて

mat = int16(rand(10,10,50)*10); %initializes a random input matrix 

%calculates the output matrix 
outMat = mat; 
for t=1:10 
    outMat(:,:,t:10:end) = cumsum(mat(:,:,t:10:end),3); 
end 

次のように、あなたはそれを変更する必要があります

isequal(outMat(:,:,5),mat(:,:,5)) 
isequal(outMat(:,:,11),mat(:,:,1)+mat(:,:,11)) 
isequal(outMat(:,:,31),mat(:,:,1)+mat(:,:,11)+mat(:,:,21)+mat(:,:,31)) 

ans = 1 
ans = 1 
ans = 1 
+0

ご返信いただきありがとうございます。輪郭を描くコマンドが通過しないようにしてください。 – user6052232

+0

私は理解して、私は私の答えを編集した – drorco

関連する問題