在循环中更改变量名称

nou*_*fal 3 matlab for-loop matrix

这是继续我的问题 从现有矩阵中提取矩阵 现在我用代码分离这些矩阵(不正确!)

for i = 3:-1:0
    mat = m((sum((m == 0), 2)==i),:)
end
Run Code Online (Sandbox Code Playgroud)

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

mat1
mat2
mat3
mat4
Run Code Online (Sandbox Code Playgroud)

任何人都可以建议一个简单的方法吗?

Sha*_*hai 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
Run Code Online (Sandbox Code Playgroud)

关于结构(好处可变字段名)是你可以save

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

你会在-file中有变量mat1...... 凉!mat10mat

一些好的编码实践:

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

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

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

  • 我认为使用结构来聚合矩阵比创建大量单独的变量更好.[这里是关于使用动态字段引用的文章的链接](http://blogs.mathworks.com/loren/2005/12/13/use-dynamic-field-references/),这对您来说非常有用. (2认同)