1

我的问题源于串联。我有一个定义为 Z(行)x X(列)x Y 的 3D 矩阵。我可以很好地垂直到 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.
4

1 回答 1

2

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

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

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

Ycontacts = cat(3,Ycontact, zeros(nz,nx,1)) - cat(3,zeros(nz,nx,1), Ycontact);
于 2013-05-30T01:08:35.100 回答