Создание нескольких матриц из одной большой матрицы - PullRequest
0 голосов
/ 05 декабря 2018

У меня есть матрица (m x n x k), где m x n - данные, соответствующие определенной широте и долготе, а k относится ко времени.

Я пытаюсь сгенерировать k матрицы, каждая из которых имеет значение m x n, поэтому у меня будет матрица для каждого временного шага.

Возможно ли это с MATLAB?

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

При наличии трехмерной матрицы X:

X = randn(10, 7, 4);

можно разбить ее на отдельные плоскости и сохранить их все в массиве ячеек следующим образом:

C = mat2cell(X, size(X,1), size(X,2), ones(size(X,3),1));

Теперь массив X(:,:,k), шаг времени k th , равен C{k}.

Существуют другие способы выделения такого трехмерного массива и другие способы.для сохранения каждого из результирующих 2D-массивов, но этот метод самый простой из известных мне.

В синтаксисе X(:,:,k) против C{k} может не быть большой разницы.Если вам неоднократно требуется доступ к каждому из 2D-массивов, последний более эффективен, так как первый должен делать копию.Если вы получите доступ к каждому из них только один раз, вам лучше будет извлекать их по мере необходимости, а не создавать массив ячеек.

0 голосов
/ 05 декабря 2018

Другие более продвинутые пользователи могут присоединиться к лучшему / более эффективному способу сделать это, но я думаю, что я понимаю, о чем вы спрашиваете, и возможный способ сделать это (мне любопытно, что касается других предложений!)

Создание новых имен переменных в цикле не просто в Matlab, но, если вы сделаете их частями структур, вы можете обойти это.

, если A является вашей m*n*k матрицей,

s = struct;

for i = 1:k
s.(['k' num2str(i)]) = A(:,:,k); % builds a field in structure s named k#
end

Это должно сделать структуру, s, которая имеет s.k1, s.k2, s.k3,и т. д., каждая из которых представляет собой матрицу m*n.

Тогда, если вам понадобится выполнить другие действия позже для всех частей s, вы можете вызвать их одинаково, используя s.(['k' num2str(i)])

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