从具有特定条件的旧3D矩阵生成新的3D矩阵

时间:2016-06-28 19:19:25

标签: matlab

我正在尝试从旧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

1 个答案:

答案 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