0

3x3 セルがあり、各セルに 9x9 の行列が含まれているとします。cellfun を使用してセル配列全体の各行を合計するにはどうすればよいでしょうか?

中かっこで : を使用しようとすると、「不正なセル参照」というエラーが発生し続けます。

それをマトリックスに変換してから、再びセルに戻したくないのです。

あなたの知恵に感謝します!

4

3 に答える 3

2

各セルエントリの各行を合計することを意味する場合は、次のようなことができます。

% random input
A = cell(3,3);
for i=1:9
    A{i} = randi(9,3,3);
end;

B = cellfun(@(x) sum(x, 2), A, 'UniformOutput', false);

更新:マトリックスに変換せずに、セル配列全体のすべての行をマトリックスであるかのように合計するには、上記を次のように変更します。

B = num2cell(zeros(3, 1)); % initialize
for i=1:3
    B = cellfun(@plus, B, A(:,i), 'UniformOutput', false); % add column-wise
end
B = cellfun(@(x) sum(x, 2), B, 'UniformOutput', false); % add within each remaning cell

これにより、行全体の合計を含む配列の3x1セルが得られます。3x1

于 2012-08-17T00:09:49.480 に答える
0

別のオプションは、cell2matnum2cellを使用することです。

a=num2cell(randi(10,3)); % random input generation

result = num2cell(sum(cell2mat(a),2));

次の質問は次のとおりです。なぜスカラーのセルマトリックスを使用しているのですか?通常の行列(を使用して取得できますcell2mat)を使用するだけでは不十分ですか?

于 2012-08-17T07:12:21.653 に答える
0

これは、 cell で各行列の行を合計するためのソリューションです。 のドキュメントをcellfun注意深く読むと、それを取得できるはずです。

clc;
clear all;
a=cell(3,3);
for i=1:3
    for j=1:3
        a{i,j}=randi(10,[9 9]);
    end
end

row_sum_cell=cellfun(@(a) sum(a,2),a,'UniformOutput',false);

次のソリューションは、cell 配列全体の行全体を合計します。

clc;
clear all;
a=cell(3,3);
for i=1:3
    for j=1:3
        a{i,j}=randi(10,[9 9]);   %generating the cell array
    end
end

[r,c]=size(a);          %getting the size of the array to concatenate it at runtime
horzCat_A=cell(r,1);

for i=1:r
    for j=1:c
        horzCat_A{i,1}=[horzCat_A{i,1} a{i,j}];    %concatenating
    end
end

%after getting a concatenated matrix, apply a cellfun same as in previous example.
cell_row_sum=cellfun(@(horzCat_A) sum(horzCat_A,2),horzCat_A,'UniformOutput',false);
于 2012-08-17T00:24:23.973 に答える