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

Apply function to every pair of cells in a cell array

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

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

为了提高效率,我不想在同一对上重复该功能两次。我怎样才能做到这一点?

这将是一个使用简单 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

返回:

第一列是运算结果,第二列是涉及的行(初始元胞数组)。


或者使用arrayfun代替循环:

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