我正在尝试从旧3D
矩阵生成新的3D
矩阵,然后绘制轮廓。新矩阵是取决于步骤的切片的总和(总和加上每10个步骤)。
新矩阵切片1-10
将与旧矩阵相同
新矩阵上的切片11
将从旧矩阵切片1+11
新矩阵上的切片12
将从旧矩阵切片2+12
,依此类推
当我到达切片21
时,新矩阵切片21
将是来自旧矩阵的1+11+21
切片
切片22
新矩阵切片22
将是旧矩阵中的2+12+22
切片,依此类推,直到我到达步骤30
当我到达切片31
时,新矩阵切片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
答案 0 :(得分:1)
<强>解决方案强>
您可以使用以下方法:
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
关于轮廓部分,您应该按如下方式进行更改:
[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
<强>结果
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