假设我有3x3个单元格,每个单元格包含一个9x9的矩阵,我将如何使用cellfun对整个单元格数组的每一行求和?
当我尝试在大括号中使用:时,我继续获取错误''坏单元格引用'。
我宁愿不将其转换为矩阵,然后再将其转换回单元格。
非常感谢你的智慧家伙!
答案 0 :(得分: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
数组提供跨行的总和。
答案 1 :(得分:0)
以下是将每个矩阵的行与单元格求和的解决方案,如果您仔细阅读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);
答案 2 :(得分:0)