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. の提案に従って、 toy が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ことです。

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

-filemat1mat10は変数が含まれます。mat涼しい!

いくつかの優れたコーディング プラクティス:

  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 に答える