Преобразование 2d в 3d массив в Matlab - PullRequest
0 голосов
/ 31 мая 2018

Моя проблема связана с изменением формы массивов в Matlab.

Я читаю в Matlab файл diegm.MAT из Фортрана.Размер этого массива составляет 12x3, и мне нужно 4x3x3.

Я попытался изменить форму, но не работает.

Это массив, который я читаю:

 5     2     5
 2     1     2
 4     3     2
 5     3     3
 5     2     4
 4     2     3
 1     1     3
 4     5     1
 3     3     1
 2     1     4
 2     3     1
 4     2     4

И это тот массив, который мне нужен:

val (:,:, 1) =

 5     1     2
 2     2     5
 5     4     3
 2     3     3

val (:,:, 2) =

 5     2     3
 2     3     4
 4     1     5
 4     1     1

val (:,:, 3) =

 3     1     1
 3     4     4
 1     2     2
 2     3     4

Здесь вы можете получить файл .MAT, который я передаю в Фортран.

http://www.mediafire.com/file/yhcj18ampvy92t5/diegm.mat

Ответы [ 2 ]

0 голосов
/ 01 июня 2018

MATLAB равен Major-column , поэтому вам нужно сначала транспонировать

octave:2> reshape(val.',4,3,[])
ans =

ans(:,:,1) =

   5   1   2
   2   2   5
   5   4   3
   2   3   3

ans(:,:,2) =

   5   2   3
   2   3   4
   4   1   5
   4   1   1

ans(:,:,3) =

   3   1   1
   3   4   4
   1   2   2
   2   3   4
0 голосов
/ 01 июня 2018

Возможно, есть более эффективный способ сделать это, но, похоже, это сработало.

Input = [ 
 5 2 5;
 2 1 2;
 4 3 2;
 5 3 3;
 5 2 4;
 4 2 3;
 1 1 3;
 4 5 1;
 3 3 1;
 2 1 4;
 2 3 1;
 4 2 4
 ];

% Make input matrix into 1x36 vector to preserve ordering
InputAsSingleRow = reshape(Input', [], 1);
% Reshape into 4x9 matrix  
Output = reshape(InputAsSingleRow,[4,9]);
% Reshape into 4x3x3 matrix you wanted
Output2 = reshape(Output,[4,3,3])

Результат:

Output2 =

ans(:,:,1) =

   5   1   2
   2   2   5
   5   4   3
   2   3   3

ans(:,:,2) =

   5   2   3
   2   3   4
   4   1   5
   4   1   1

ans(:,:,3) =

   3   1   1
   3   4   4
   1   2   2
   2   3   4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...