[按功能从向量中获取元素对/三重/四重…

问题描述 投票:0回答:1

我有一个包含几个元素的向量,我想编写一个函数,该函数返回该向量中x个项目的所有组合。

以下代码为情况x=2x=3x=4产生正确的输出。但是,我不能遵循这种想法为每个可能的x实现解决方案。

values = {'A','B','C','D','E'};
n = length(values);

data2 = {}; % case x=2
for i = 1:n
    for j = i+1:n
        data2{end+1} = {values{i}, values{j}};
        fprintf('%s %s\n',values{i}, values{j})
    end
end

data3 = {}; % case x=3
for i = 1:n
    for j = i+1:n
        for k = j+1:n
            data3{end+1} = {values{i}, values{j}, values{k}};
            fprintf('%s %s %s\n',values{i}, values{j}, values{k})
        end
    end
end

data4 = {}; % case x=4
for i = 1:n
    for j = i+1:n
        for k = j+1:n
            for l = k+1:n
                data4{end+1} = {values{i}, values{j}, values{k}, values{l}};
                fprintf('%s %s %s %s\n',values{i}, values{j}, values{k}, values{l})
            end
        end
    end
end

[看起来像一个函数将能够返回我的data变量?

data = getCombinations(values, x) %values is vector with elements, x is integer value

编辑下面的代码非常接近:

data = perms(values)
data = data(:,1:x)
data = unique(data,'rows')

但是它仍会产生类似A,BB,A的输出

EDIT2这以某种方式修复了它,但是看起来不是很好,它不适用于单元格中的文本输入,而仅适用于数字

data = perms(values)
data = data(:,1:x)
data = sort(data,2)
data = unique(data,'rows')

EDIT3做到了,但是看起来不是很好...也许有更好的解决方案?

function [data] = getCombinations(values,x)
    i = 1:length(values);

    d = perms(i);
    d = d(:,1:x);
    d = sort(d,2);
    d = unique(d,'rows');

    data = v(d);
end
algorithm matlab
1个回答
0
投票

如果您不希望重复(并且您的示例建议您不重复),请尝试将nchoosek设置为nchoosek(1:n, x)

values = {'A','B','C','D','E'};
n = length(values);
x = 3;

C = nchoosek(1:n, x);

data = values(C)

在上面,每行是values的5个元素中3个的唯一组合。

© www.soinside.com 2019 - 2024. All rights reserved.