我有一个9x3矩阵,我将其细分为三(3)个3x3矩阵。现在我想制作一个for循环函数,将每个3x3矩阵存储到一个变量中。
X=reshape(1:27,3,9)'; % sample 9x3 matrix
xx = mat2cell(X,[3,3,3],3); % subdivide X matrix into 3x3 cell matrix
for i:1:3
x(i) = xx{i,1}; %store the three cells into x1 x2 and x3 matrix
end
我知道这不是它在matlab中的工作原理,只是为了展示我想要达到的功能。
答案 0 :(得分:1)
您可以使用X=reshape(1:27,3,9)'; % sample 9x3 matrix
xx = mat2cell(X,[3,3,3],3); % subdivide X matrix into 3x3 cell matrix
for i=1:3
eval(['x' num2str(i) ' = xx{' num2str(i) ',1};']);
end
功能。
eval
但根本不建议。实际上我总是避免使用{{1}},因为MATLAB编辑器不会检查代码。
拥有多个变量也不是一个好主意,而是使用单元格,结构等,以便更好地使用其余代码。
答案 1 :(得分:0)
这是你正在寻找的吗?
X=reshape(1:27,3,9)';
for i=1:3
block = X(3*i-2:3*i,:);
disp(block);
end
答案 2 :(得分:0)
执行此操作的首选方法是将其实际存储在3D数组中,然后您可以沿第三维访问每个元素。原因是MATLAB针对使用矩阵进行计算进行了优化,因此如果将所有数据保存在矩阵中,则可以在所有组件上以矢量化方式执行操作。
更好的是,您可以使用for
和reshape
删除创建它所需的permute
循环。
X = permute(reshape(X', [3 3 3]), [2 1 3]);
% And access each element
X(:,:,1)
X(:,:,2)
X(:,:,3)
这比使用单元格数组或eval
更具性能。