3

这是我的问题 从现有矩阵中提取矩阵的延续 现在我通过代码将这些矩阵分开(不正确!)

for i = 3:-1:0
    mat = m((sum((m == 0), 2)==i),:)
end

以上部分是对我原来的问题的更新,
我想相应地命名它,比如

mat1
mat2
mat3
mat4

有人可以建议一个简单的方法吗?

4

2 回答 2

10

根据@Jonas 和@Clement-J. 的建议,以下是玩具如何使用cells 和structs:

N = 10; % number of matrices
cell_mat = cell(1, N); % pre allocate (good practice)
for ii = 1 : 10
    cell_mat{ii} = rand( ii ); % generate some matrix for "mat"
    struct_mat.( sprintf( 'mat%d', ii ) ) = rand( ii );
end

结构(带有变量字段名称)的好处是你save可以

保存('myMatFile.mat','struct_mat','-struct');

并且您将在-file中有变量mat1,... !凉爽的!mat10mat

一些好的编码实践:

  1. 在 Matlab 中预分配矩阵和数组。在循环内更改变量大小确实会减慢 Matlab 的速度。

  2. 不要将iand用作循环变量(或根本用作变量),因为它们被Matlabj用作。sqrt(-1)

  3. 为什么要使用带有变量名的变量?你需要有一个非常好的理由这样做!请描述你想要达到的目标,我相信你会在这里得到更好、更优雅的解决方案......

于 2013-01-19T20:29:29.123 回答
3

这是一种使用evalandsprintf函数的方法。请参阅两者的文档以了解有关它们的更多信息。

for count = 1:10
    eval(sprintf('mat%d = zeros(count);',count));
end
于 2013-01-19T17:02:35.627 回答