将函数应用于单元格数组中的每对单元格

时间:2015-04-11 15:07:19

标签: arrays matlab cell

我有一个包含943个单元格的单元格数组,每个单元格包含一个二进制元素数组。我想在每对单元格上应用一个函数(例如'和'操作),例如:

and(cell1,cell2), and(cell1,cell3) ..... and(cell1,cell943)
                  and(cell2,cell3) ..... and(cell2,cell943)
.                                                 .
.                                                 .                                                  
.                                                 .
.                                        and(cell942,cell943)

出于效率目的,我不想两次在同一对上重复该功能。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:4)

这将是一个使用简单的for循环的解决方案:

A = { [0 1 0 1 0 1 0 1] ;
      [1 1 1 0 1 0 0 1] ;
      [0 0 0 1 1 1 0 1] }

n = numel(A);
combs = nchoosek(1:n,2)

for ii = 1:n
    output{ii,1} = A{combs(ii,1)} & A{combs(ii,2)};
    output{ii,2} = combs(ii,:);
end

返回:

enter image description here

在第一列中,您获得了操作的结果,在第二列中包含了所涉及的行(初始单元格数组)。


或使用arrayfun代替循环:

output = arrayfun(@(x) A{combs(x,1)} & A{combs(x,2)},1:n,'uni',0).';