假设我有 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
其中包含跨行的总和。
这是将每个矩阵的行与一个单元格相加的解决方案,如果您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);
以下解决方案对元胞数组中的整行求和:
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);