簡體   English   中英

Cellfun:如何對矩陣的單元格數組中的每一行求和? MATLAB

[英]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);

另一種選擇是使用cell2matnum2cell

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

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

接下來的問題是:你為什么要使用標量的單元矩陣? 你不能只使用普通矩陣(你可以使用cell2mat獲得)嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM