我有一个包含943个单元格的单元格数组,每个单元格包含一个二进制元素数组。我想在每对单元格上应用一个函数(例如'和'操作),例如:
and(cell1,cell2), and(cell1,cell3) ..... and(cell1,cell943)
and(cell2,cell3) ..... and(cell2,cell943)
. .
. .
. .
. and(cell942,cell943)
出于效率目的,我不想两次在同一对上重复该功能。我怎样才能做到这一点?
答案 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
返回:
在第一列中,您获得了操作的结果,在第二列中包含了所涉及的行(初始单元格数组)。
或使用arrayfun
代替循环:
output = arrayfun(@(x) A{combs(x,1)} & A{combs(x,2)},1:n,'uni',0).';