Cellfun:如何对矩阵的单元格数组中的每一行求和? MATLAB

时间:2012-08-16 23:47:29

标签: matlab sum cells

假设我有3x3个单元格,每个单元格包含一个9x9的矩阵,我将如何使用cellfun对整个单元格数组的每一行求和?

当我尝试在大括号中使用:时,我继续获取错误''坏单元格引用'。

我宁愿不将其转换为矩阵,然后再将其转换回单元格。

非常感谢你的智慧家伙!

3 个答案:

答案 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

这将为3x13x1数组提供跨行的总和。

答案 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)

另一种选择是使用cell2matnum2cell

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

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

接下来的问题是:你为什么要使用标量的单元矩阵?你不能只使用普通矩阵(你可以使用cell2mat获得)?