在循环中更改变量名称

时间:2013-01-19 16:55:57

标签: matlab for-loop matrix

这是我的问题的继续Extract matrix from existing matrix 现在我用代码 分隔这些矩阵(不正确!)

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

以上部分是我原始问题的更新 我想要相应地命名,如

mat1
mat2
mat3
mat4

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

2 个答案:

答案 0 :(得分:10)

关注@Jonas和@ Clement-J。的建议,以下是玩具如何使用cellstruct s:

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

结构(with variable field names)的好处是你可以save

save('myMatFile.mat','struct_mat',' - struct');

您将在mat1文件中拥有变量mat10,...,mat!酷!

一些良好的编码实践:

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

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

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

答案 1 :(得分:3)

以下是使用evalsprintf函数执行此操作的方法。请参阅两者的文档以了解有关它们的更多信息。

for count = 1:10
    eval(sprintf('mat%d = zeros(count);',count));
end