【问题标题】:turing a 3d matrix so 3rd dimension becomes the 2nd dimension图灵一个 3d 矩阵,所以第 3 维变成第 2 维
【发布时间】:2013-05-30 00:49:08
【问题描述】:

我的问题源于串联。我有一个定义为 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.

【问题讨论】:

  • 你试过cat,而不是horzcat?它是更通用的函数,形式为cat(DIM,A,B)。那么,试试cat(3,Ycontact,zeros(nz,nx,1),)?请参阅我更彻底的答案。
  • 你可以看看函数permute(和ipermute)和shiftdim

标签: matlab matrix


【解决方案1】:

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

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

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

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

【讨论】:

  • 没问题,@user1502755。如果您觉得它已经回答了您的问题,请随时按“打勾”按钮,接受我的回答。 :)
猜你喜欢
  • 2016-08-08
  • 2015-08-05
  • 1970-01-01
  • 2015-02-02
  • 1970-01-01
  • 2016-05-08
  • 1970-01-01
  • 2010-11-26
  • 2017-03-04
相关资源
最近更新 更多