Как вставить пустой массив в многомерный массив в MATLAB? - PullRequest
0 голосов
/ 27 июня 2019

У меня есть трехмерная матрица 't' размером 174x162x286, представляющая долготу x широту x временного шага. Тем не менее, в 't' отсутствуют три временных шага. Мне нужно вставить пустой массив в эти конкретные места так, чтобы конечный продукт имел размер «t» размером 174x162x289.

т (:,:, 236) = NaN;

Я не хочу сдвигать весь массив.

1 Ответ

3 голосов
/ 27 июня 2019

Вы можете сделать это за один раз следующим образом:

t = randi(9, 2, 4, 7); % example data
ind_insert = [3 5 6 6]; % insert immediately after these 3rd-dim positions 

[~, ind] = sort([1:size(t,3) ind_insert]); % exploits the fact that sorting is stable
t = cat(3, t, NaN(size(t,1), size(t,2), numel(ind_insert)));
t = t(:,:,ind);

Пример: до:

t(:,:,1) =
     3     7     4     7
     3     8     8     1
t(:,:,2) =
     6     9     5     5
     4     1     4     7
t(:,:,3) =
     3     5     2     5
     8     1     7     2
t(:,:,4) =
     4     2     3     3
     6     7     9     7
t(:,:,5) =
     2     1     7     4
     3     6     5     6
t(:,:,6) =
     6     6     2     3
     7     9     7     2
t(:,:,7) =
     6     5     7     6
     5     6     4     4

После:

t(:,:,1) =
     3     7     4     7
     3     8     8     1
t(:,:,2) =
     6     9     5     5
     4     1     4     7
t(:,:,3) =
     3     5     2     5
     8     1     7     2
t(:,:,4) =
   NaN   NaN   NaN   NaN
   NaN   NaN   NaN   NaN
t(:,:,5) =
     4     2     3     3
     6     7     9     7
t(:,:,6) =
     2     1     7     4
     3     6     5     6
t(:,:,7) =
   NaN   NaN   NaN   NaN
   NaN   NaN   NaN   NaN
t(:,:,8) =
     6     6     2     3
     7     9     7     2
t(:,:,9) =
   NaN   NaN   NaN   NaN
   NaN   NaN   NaN   NaN
t(:,:,10) =
   NaN   NaN   NaN   NaN
   NaN   NaN   NaN   NaN
t(:,:,11) =
     6     5     7     6
     5     6     4     4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...