将3x3矩阵存储在for循环中的变量中

时间:2016-06-12 12:19:38

标签: matlab

我有一个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中的工作原理,只是为了展示我想要达到的功能。

3 个答案:

答案 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针对使用矩阵进行计算进行了优化,因此如果将所有数据保存在矩阵中,则可以在所有组件上以矢量化方式执行操作。

更好的是,您可以使用forreshape删除创建它所需的permute循环。

X = permute(reshape(X', [3 3 3]), [2 1 3]);

% And access each element
X(:,:,1)
X(:,:,2)
X(:,:,3)

这比使用单元格数组或eval更具性能。