3x3 セルがあり、各セルに 9x9 の行列が含まれているとします。cellfun を使用してセル配列全体の各行を合計するにはどうすればよいでしょうか?
中かっこで : を使用しようとすると、「不正なセル参照」というエラーが発生し続けます。
それをマトリックスに変換してから、再びセルに戻したくないのです。
あなたの知恵に感謝します!
各セルエントリの各行を合計することを意味する場合は、次のようなことができます。
% 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
これは、 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);