代码之家  ›  专栏  ›  技术社区  ›  MattS

MATLAB-如何组合VEC()单元格?

  •  1
  • MattS  · 技术社区  · 8 年前

    假设我的向量不包含双精度。它们包含单元格。 combvec 拒绝接受单元格值。。。例如:

    m = {
        [cell1, cell2, cell3];
        [cell4, cell5];
        [cell6];
        };
    

    我想以某种方式得到一个细胞向量,包含所有可能的细胞组合: [[cell1, cell4, cell6]; [cell1, cell5, cell6]; [cell2, cell4, cell6]; [cell2, cell5, cell6]; [cell3, cell4, cell6]; [cell3, cell5, cell6];];

    如何做到这一点?

    P、 S。 我之所以这样做,是因为我对项目进行了分组,我想找到它们的所有组合,所以我想将它们插入nx1单元格。如果有更好的解决方案,请建议。。。

    1 回复  |  直到 8 年前
        1
  •  1
  •   Wolfie Radu Stefan    8 年前

    仅使用 combvec 使用表示列索引的整数数组,然后使用该数组索引原始数组

    C = {[{1} {2} {3}]; [{4} {5}]; [{6}]}
    cv = combvec(1:3, 1:2, 1)
    
    out = [C{1}(1,cv(1,:)); C{2}(1,cv(2,:)); C{3}(1,cv(3,:))];
    

    你可以这样概括(可能有更简洁的方法)

    idx = cellfun(@(x) 1:numel(x), C, 'uni', 0); % set up indexing array
    cv = combvec(idx{:}); % get combinations
    
    out = arrayfun(@(x) C{x}(1,cv(x,:)), 1:3, 'uni', 0); % index into the cell array
    out = vertcat(out{:}); % concatenate results
    
    % Result
    >> out = 
    {[1]}    {[2]}    {[3]}    {[1]}    {[2]}    {[3]}
    {[4]}    {[4]}    {[4]}    {[5]}    {[5]}    {[5]}
    {[6]}    {[6]}    {[6]}    {[6]}    {[6]}    {[6]}