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

Cellfun:如何对矩阵单元格数组中的每一行求和?Matlab,matlab,sum,cells,Matlab,Sum,Cells,假设我有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),

假设我有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);
另一种选择是使用和:


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

你可以使用
NumCell(rand(3))
来生成随机输入。谢谢,但我指的是整个单元格数组中每行的总和@谢谢你!对于每一行,您的意思是为9个数组中的每一个获得单个3x3矩阵的元素式和,即
cellfun
等效版本的
C=0;对于i=1:9,C=C+(A{i});结束
?@GuntherStruyf的观点很好,但矩阵单元格条目使用了
mat2cell
。我为不清楚表示歉意。我想在最后有一个向量,它是整个单元格数组中每一行的总和,就像单元格数组是一个矩阵一样。我试图避免将单元格转换为矩阵,因为我必须将其转换回单元格:)是的,我考虑过这样做,然后再将其转换回单元格,但我的代码的下一部分更好地以单元格形式完成。我认为使用cellfun可能比将一组单元格转换成矩阵然后再转换回一组单元格更快。非常感谢您的帮助。非常感谢,我能够以多种方式对每个单元格中的每个矩阵求和,但我希望对整个单元格数组行求和。这一点我似乎无法理解:)太棒了,谢谢。因此,您将单元阵列拆分为行,然后执行cellfun,从中学习了很多,谢谢!我不是说“我将数组拆分为行”,而是说我将按列方式连接单元格数组每行中的矩阵
a=num2cell(randi(10,3)); % random input generation

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