1

matlab 配列をセル値の配列に変換できません。

stacksize = size(resultStack.('f'),1); % 2897 values
exportc = cell(stacksize+1, 4);

exportc{1,1} = 'top';
exportc{1,2} = 'bottom';
exportc{1,3} = 'left';
exportc{1,4} = 'right';

exportc{2:end,:} = mat2cell(resultStack.('f'), 1:stacksize, 1:4);

これはエラーで終了します

入力引数 D1 から D2 は、入力行列サイズ [2897 4] の各次元に合計する必要があります。

私は何を間違っていますか?

4

2 に答える 2

3

mat2cell正しく使用していません。使用方法は次のとおりです。

C = mat2cell(resultStack.('f'), ones(stacksize,1), ones(1,4)) 

つまり、出力セルのC各行に次の 1 行と 1 列が含まれるように指定しますresultStack.f(これがすべての 1 の背後にある理由です)。

また、Colin T. Bowers が示しているように、ベアス インデックス ( ) を使用()て別のセルからデータをコピーし、セルからデータを取得する{}ときはブラケット インデックス ( )のみを使用する必要があります。

したがって、コードの完全な修正版は次のようになります。

stacksize = size(resultStack.('f'),1); % 2897 values
exportc = cell(stacksize+1, 4);

exportc(1,:) = {'top' 'bottom' 'left' 'right'};
exportc(2:end,:) = mat2cell(resultStack.('f'), ones(stacksize,1), ones(1,4));

または、目的の出力で許可されているため、より新しく、より優れた、より単純なnum2cellコマンドを使用できます。

exportc(1,:)     = {'top' 'bottom' 'left' 'right'};
exportc(2:end,:) = num2cell(resultStack.('f'));
于 2012-12-06T09:45:52.310 に答える
0

更新: Rodyは、ここで言及した問題以外の2番目の問題をコードで発見しました。彼の完全に修正されたソリューションをコードに組み込む必要があります。それに満足している場合は、彼の応答を回答としてマークしてください。不完全であるため、この応答を回答としてマークしないでください。

()セル配列を別のセル配列のサブセットに割り当てる場合は、括弧を使用します。例:

%# A simple example
A = cell(2, 2);
B = {'hello', 'world'};
A(1, :) = B;

コードで、最後の行を次のように変更する必要があります。

exportc(2:end,:) = mat2cell(resultStack.('f'), 1:stacksize, 1:4);

中括弧{}は、セル配列の単一セルの内容にインデックスを付けるために予約されていることに注意してください。

于 2012-12-06T09:27:38.803 に答える