2013-05-30 3 views
1

Моя проблема связана с конкатенацией. У меня есть трехмерная матрица, определенная как Z (строки) x X (столбцы) x Y. Я могу перенести на метку размерности Z. Я могу Horzcat может на размер X размер. Но не ось Y, потому что horzcat добавляет только к 2-му измерению (согласно файлу справки).turing 3d-матрица, поэтому 3-е измерение становится вторым измерением

Чтобы подчеркнуть, я не пытаюсь расширить исходную матрицу.

  • оригинального 3D матрица (MGeol) имеет значение для геологической области клетки сидеть.
  • Я работаю, где регионы изменить вычитание немного меньшие версий матрицы MGeol, смещенные на один, в Z, X и Y. В результате нештатные значения находятся в контакте между регионами.
  • Чтобы получить все эти результаты обратно в матрицу того же размера, что и оригинал, чтобы я мог выровнять их с векторами координат.

Поэтому я добавляю слой нулей на размер смещения и конкатенацию. Его работа для строк (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. 
+0

Вы пробовали 'cat', а не' horzcat'? Это более общая функция вида 'cat (DIM, A, B)'. Итак, попробуйте 'cat (3, Ycontact, нули (nz, nx, 1),)'? См. Мой более тщательный ответ. –

+0

Вы можете посмотреть функции 'permute' (и' ipermute') и 'shiftdim'. – horchler

ответ

2

я решил изменить свой комментарий к ответу, видя, как я подозреваю, что это будет работать таким образом:

vertcat произведения конкатенации вдоль 1-го измерения (строки). horzcat работает по 2-му измерению (столбцам). Более общий вид функции: cat(DIM,A,B), который объединяет A и B по размеру, DIM.

Таким образом, для вашего случая, попробуйте:

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

Спасибо David_G. Не чувствую себя глупо. Он работает нормально. – user1502755

+0

Не проблема, @ user1502755. Если вы чувствуете, что ответили на ваш вопрос, не стесняйтесь нажать кнопку «tick», чтобы принять мой ответ. :) –

Смежные вопросы