转动3d矩阵使第三维成为第二维

时间:2013-05-30 00:49:08

标签: matlab matrix

我的问题源于连接。我有一个3D矩阵,定义为Z(行)x X(列)x Y.我可以精确地转移到Z维度上。我可以将horzcat放到X维度上。但不是Y轴,因为horzcat只会添加到第二维(根据帮助文件)。

要强调,我不是要扩展原始矩阵。

  • 原始3D矩阵(MGeol)具有地质区域单元格所在的值。
  • 通过在Z,X和Y方向上减去稍微更小的MGeol矩阵版本(偏移1)来计算区域变化的位置。结果是非零值是区域之间的接触。
  • 要将所有这些结果恢复到与原始相同的大小矩阵中,以便我可以将它们与坐标向量对齐。

所以我在偏移维度上添加了一层零并连接。它的行(Z)和列(X)工作,但我如何操纵Z到horzcat并保持秩序?

Zcontact = MGeol(1:nz-1,:,:) - MGeol(2:nz,:,:);

Zcontacts = vertcat(Zcontact, zeros(1,nx,ny)) - vertcat(zeros(1,nx,ny), Zcontact);

Xcontact = MGeol(:,1:nx-1,:) - MGeol(:,2:nx,:);

Xcontacts = horzcat(Xcontact, zeros(nz,1,ny)) - horzcat(zeros(nz,1,ny), Xcontact);

Ycontact = MGeol(:,:,1:ny-1) - MGeol(:,:,2:ny);

Ycontacts = horzcat(Ycontact, zeros(nz,nx,1)) - horzcat(zeros(nz,nx,1), Ycontact); %<- causes the error

Error using horzcat
CAT arguments dimensions are not consistent.

1 个答案:

答案 0 :(得分:2)

我想我会将我的评论改为答案,因为我怀疑它会以这种方式运作:

vertcat通过连接第一维(行)来工作。 horzcat通过第二维(列)工作。函数的更一般形式是cat(DIM,A,B),它沿着维度A连接BDIM

因此,对于您的情况,请尝试:

Ycontacts = cat(3,Ycontact, zeros(nz,nx,1)) - cat(3,zeros(nz,nx,1), Ycontact);
相关问题