【问题标题】:Elements combination in MATLABMATLAB中的元素组合
【发布时间】:2019-02-04 15:17:45
【问题描述】:

我有一个问题,我需要构建一个函数,其输出是一个矩阵,用于一个元素之间的所有可能组合,该元素仅重复一次,而另一个元素可以是一个或多个。

例如,假设我们有一个维度为 3 x 1 的数组 y,初始化为 [0 0 0] 第一个元素是 x,它只重复一次,第二个元素 r 重复一个或多个。所以我需要构建的结果矩阵将与那个相似:

y = [x r 0; 
     x 0 r;
     x r r;
     r x 0;
     0 x r;
     r x r;
     r 0 x;
     0 r x;
     r r x]

我尝试使用nchoosek,但这不起作用,因为当我有 [x r 0] 时,我不能有 [x 0 r]。

我用排列尝试了这个例子,但是我现在不能根据上面的矩阵把 x 放在 3 的位置,把 r 放在 0 的位置

clear all 
clc 

v = 1 : 3; 
vv = perms(v); 
vv(vv<3)=0;

请您帮忙。

谢谢

【问题讨论】:

  • 您的示例令人困惑。你说第一个元素是x,它只重复了一次,但实际上它出现了三遍。请发布一个带有实际数字的清晰示例
  • 您是否尝试过编写一些代码来做到这一点?好像不是特别难。好吧,你放的例子会在 MATLAB 中抛出一个错误,我假设你在那里犯了一些错别字
  • @LuisMendo .. 在每个组合中,元素 x 重复一次,另一个元素 r 正在变化,元素 x 重复 3 次,但每次都改变位置r 或 with r 重复多次
  • @AnderBiguri 我试过了,但我遇到了问题! ..我不能。你能帮忙吗?
  • @New_student 告诉我们你的尝试

标签: matlab


【解决方案1】:

你有一个棘手的问题。我就是这样解决的:

  1. 假设你有 2 个r:r1,r2
  2. 计算所有排列
  3. 删除等效的(其中r1 代替r2,反之亦然)
  4. 删除不喜欢的(没有x的)

最后你有它在“代码模式”,你只需要用相应的变量替换数字。我相信你可以弄清楚这一点;)

% Code is:
% x=1
% r=2
% r=3
% 0=4
nk=nchoosek(1:4,3);

% compute all permutations
fullperms=[];
for ii=1:size(nk,1)
    fullperms=[fullperms; perms(nk(ii,:))];
end

% Remove the ones that are "the same" (we have 2 r)
% eg
% [1 2 4] and [1 3 4]
fullpermsaux=fullperms;
fullpermsaux(fullpermsaux==2)=3;
[~,ia,~]=unique(fullpermsaux,'rows');
fullperms=fullperms(ia,:);

% Remove the ones that have no "x"
fullperms(~any(fullperms'==1)',:)=[];

% Tada!

% Replace numbers as:
% x=1
% r=2
% r=3
% 0=4

【讨论】:

  • 谢谢兄弟 .. 效果很好。老实说,结果运行良好,但我仍然尝试了解它的工作方式,以替换您所说的数字。再次感谢:)
  • 是的,这很好。我现在明白了。但我想把它放在一个函数中。关于nk=nchoosek(1:4,3);那一步,什么是4,什么是3? 4 是结果矩阵 y 的维数加 1,而 3 是我们可以拥有的最大变量数,例如 x r r?你能澄清一下吗?因为我需要下一步为 4 维构建相同的东西,这意味着 [x r 0 0],然后直到 [x r r r],所以该函数将是该代码的首选。
  • @New_student 4 是变量([x,r1,r2,0]),3 是您希望在每一行中的元素。如果[x r r r] 是一个选项,那么您需要包括第三个rr3,因此增加变量的数量。
  • 是的,我明白了.. 但我们可以把它作为变量吗?我的意思是4和3,然后把then放在一个函数里?
  • @New_student 是的,我想你可以,没有任何暗示你不能。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多