[英]Cellfun : How to sum each row in a cell array of matrices? Matlab
假設我有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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.