gpt4 book ai didi

algorithm - 通过函数从向量中获取成对/三重/四重...元素

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:49:14 28 4
gpt4 key购买 nike

我有一个包含几个元素的向量,我想编写一个函数,返回该向量中 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

这样的输出

编辑2这以某种方式修复了它,但它看起来不太好,它不适用于单元格中的文本条目,但仅适用于数字

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

编辑3这样做了,但看起来不太好......也许有更好的解决方案?

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

最佳答案

如果您不想重复(并且您的示例表明您不需要),请尝试使用 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 个的唯一组合。

或者直接传入值:

data = nchoosek(values, x);

关于algorithm - 通过函数从向量中获取成对/三重/四重...元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58646379/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com