0

4x1セル配列 があり、A各セル内に2x5行列があるとします。

A={[1 1 1 1 1; 2 2 2 2 2];
   [3 3 3 3 3; 4 4 4 4 4];
   [5 5 5 5 5; 6 6 6 6 6];
   [7 7 7 7 7; 8 8 8 8 8]}

私が望むのは、各セルの行列100の列に定数を追加することです。例えば4thB

B={[ 1 1 1 101 1; 2 2 2 102 2];
   [3 3 3 103 3; 4 4 4 104 4];
   [5 5 5 105 5; 6 6 6 106 6];
   [7 7 7 107 7; 8 8 8 108 8]}

それを行う最良の方法は何ですか?

を使用して加算結果を取得できます

B=cellfun(@(x) x(:,4)+100,A,'uni',0) 

しかし、Bを取得するのは困難です。どんな助けも大歓迎です。

4

2 に答える 2

3

セル内の行列がA同じ次元 (この場合は 2x5 行列) であることを保証できる場合は、すべての行列を垂直に連結できます。

B = cat(1, A{:});

次に、4 番目の列に 100 を追加します。

B(:, 4) = B(:, 4) + 100;

次に、それをセル配列に戻します。

B = mat2cell(B, size(A{1}, 1) * ones(size(A)), size(A{1}, 2));

この場合、セル配列ではなく 3 次元行列としてデータを表現することを検討してください。操作がはるかに簡単になります。

一般的なケースでは、forループを使用します。

B = A;
for k = 1:numel(A)
    B{k}(:, 4) = B{k}(:, 4) + 100;
end
于 2013-03-09T22:17:09.557 に答える
1

以下に示すように、各セルにマトリックスを追加できます。

B=cellfun(@(x) x+[0 0 0 100 0;0 0 0 100 0],A,'UniformOutput',false); 
于 2013-03-09T22:19:27.423 に答える