这是我的问题的继续Extract matrix from existing matrix
现在我用代码 分隔这些矩阵(不正确!)
for i = 3:-1:0
mat = m((sum((m == 0), 2)==i),:)
end
以上部分是我原始问题的更新
我想要相应地命名,如
mat1
mat2
mat3
mat4
有人可以建议一个简单的方法吗?
答案 0 :(得分:10)
关注@Jonas和@ Clement-J。的建议,以下是玩具如何使用cell
和struct
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
!酷!
一些良好的编码实践:
在Matlab中预分配矩阵和数组。在循环中更改变量大小确实会降低Matlab的速度。
不要将i
和j
用作循环变量(或根本不是变量),因为它们被Matlab用作sqrt(-1)
。
为什么变量名变量?你需要有一个非常好的理由!请描述一下你想要达到的目标,我相信你们会在这里获得更好,更优雅的解决方案......
答案 1 :(得分:3)
以下是使用eval
和sprintf
函数执行此操作的方法。请参阅两者的文档以了解有关它们的更多信息。
for count = 1:10
eval(sprintf('mat%d = zeros(count);',count));
end