从一个大矩阵创建多个矩阵

时间:2018-12-05 09:34:04

标签: matlab matrix

我有一个矩阵(m x n x k,其中m x n是对应于特定纬度和经度的数据,{{ 1}}是指时间。

我正在尝试生成k矩阵,其中每个on为k x m,因此每个时间步长都有一个矩阵。

使用MATLAB可以吗?

2 个答案:

答案 0 :(得分:2)

给出3D矩阵X

X = randn(10, 7, 4);

可以将其拆分为单个平面,并将它们全部存储在单元格数组中,如下所示:

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

现在,数组X(:,:,k)(第k 个时间步长)为C{k}

还有其他方法可以拆分出这样的3D数组,也可以使用其他方法来存储每个生成的2D数组,但这是我所知道的最简单的方法。

X(:,:,k)C{k}的语法可能没有太大区别。如果您反复需要访问每个2D阵列,则后者效率更高,因为前者需要进行复制。如果只访问它们中的每一个,则最好根据需要提取它们,而不是创建单元数组。

答案 1 :(得分:1)

其他更高级的用户可能会以更好/更有效的方式来实现此目的,但是我想我理解您的要求以及可行的方式(我对其他建议感到好奇!)

在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.k1s.k2s.k3等,每个结构都只是一个m*n矩阵。

然后,如果您以后需要对s的所有部分执行其他操作,则可以使用s.(['k' num2str(i)])

以相同的方式调用它们