我有一个矩阵(m
x n
x k
,其中m
x n
是对应于特定纬度和经度的数据,{{ 1}}是指时间。
我正在尝试生成k
矩阵,其中每个on为k
x m
,因此每个时间步长都有一个矩阵。
使用MATLAB可以吗?
答案 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.k1
,s.k2
,s.k3
等,每个结构都只是一个m*n
矩阵。
然后,如果您以后需要对s的所有部分执行其他操作,则可以使用s.(['k' num2str(i)])