说我有3×3格,每格包含9×9的矩阵,我将如何去使用cellfun来概括整个单元阵列的每一行?
我一直得到错误“”坏的单元格引用'当我尝试使用:在大括号。
我宁愿不再次将其转换为一个矩阵,然后回电池。
非常感谢你的智慧的家伙!
说我有3×3格,每格包含9×9的矩阵,我将如何去使用cellfun来概括整个单元阵列的每一行?
我一直得到错误“”坏的单元格引用'当我尝试使用:在大括号。
我宁愿不再次将其转换为一个矩阵,然后回电池。
非常感谢你的智慧的家伙!
下面是总结每个矩阵的行与细胞的解决方案,如果你读的文档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);
如果你的意思是在每个单元格输入总结各行也许你可以做这样的事情:
% 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
阵列,跨行的款项。
另一种选择是使用cell2mat和num2cell :
a=num2cell(randi(10,3)); % random input generation
result = num2cell(sum(cell2mat(a),2));
接下来的问题则是:你为什么和标量单元矩阵的工作? 你不能只是一个普通的矩阵(你可以使用获得工作cell2mat
)?