繁体   English   中英

图元3d矩阵,因此第3维成为第2维

[英]turing a 3d matrix so 3rd dimension becomes the 2nd dimension

我的问题源于串联。 我有一个3D矩阵,定义为Z(行)x X(列)xY。我可以将其转换为Z尺寸。 我可以将horzcat放到X维度上。 但不包括Y轴,因为horzcat仅添加到第二维上(根据帮助文件)。

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

  • 原始3D矩阵(MGeol)具有单元所在的地质区域的值。
  • 我通过减去Z,X和Y方向上偏移一个的MGeol矩阵的较小版本来确定区域的变化。 结果是区域之间的接触处非零值。
  • 为了将所有这些结果返回到与原始结果相同的大小矩阵中,因此我可以将它们与坐标向量对齐。

因此,我将零层添加到偏移尺寸上并进行连接。 它适用于行(Z)和列(X),但如何操作Z来保持水平并保持秩序?

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.

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

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

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

Ycontacts = cat(3,Ycontact, zeros(nz,nx,1)) - cat(3,zeros(nz,nx,1), Ycontact);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM