将函数应用于元胞数组中的每对元胞
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).';
我有一个包含 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).';