一个matlab里的排列组合或者说是循环嵌套的层数不定的问题,如何解决?

我要完成类似这么一个工作:我有一个n维的坐标,[a,b,c....n]坐标的范围已知,如何将所有的坐标都填到一个矩阵里去,举例说明,假设有[a,b,c]取值在[3,3,3... 我要完成类似这么一个工作:我有一个n维的坐标,[a,b,c....n]坐标的范围已知,如何将所有的坐标都填到一个矩阵里去,举例说明,假设有[a,b,c]取值在[3,3,3]到[4,4,4]之间,那么应该这之间的所有坐标为444,344,434,443,334,343,433,333也就是2*2*2个,这是一个排列组合的问题,可是我试了用perms好像无法实现我的要求,而如果用循环嵌套的方式,因为n是不定的,那么嵌套的层数不定,也不知道如何解决,请问哪位大神能给我一个解决方案?万分感谢! 展开
 我来答
tianxiawulang
2014-01-12 · TA获得超过2.7万个赞
知道大有可为答主
回答量:4732
采纳率:89%
帮助的人:2679万
展开全部

基本思路

1、使用ndgrid生成N维网格数据;
2、把网格数据转换为坐标组合。

 

参考代码

% 把每维的坐标写成向量,然后放在一个cell数组中
% 这里按照你给的例子示范(三个坐标)
C = { 3:4 3:4 3:4 };

% 使用ndgrid生成N维网格数据
n = length(C);
S=arrayfun(@(i)sprintf('x%i ',i),1:3,'UniformOutput',false);
eval(['[' S{:} ']=ndgrid(C{:});'])
S1=arrayfun(@(i)sprintf('x%i(:) ',i),1:3,'UniformOutput',false);

% 把网格数据转换为坐标组合
X=eval(['[' S1{:} ']'])

 

运行结果

X =
     3     3     3
     4     3     3
     3     4     3
     4     4     3
     3     3     4
     4     3     4
     3     4     4
     4     4     4
dukinkin
2014-01-12 · TA获得超过1.3万个赞
知道大有可为答主
回答量:2444
采纳率:90%
帮助的人:949万
展开全部

为什么是不定的维数?真奇怪

function [ out ] = ndimidx( idx,n )
le=length(idx);
out=zeros(le^n,n);
if n==1;
    out=idx(:);
else
    temp=ndinidx(idx,n-1);
    temp1=repmat(idx(:).',[size(temp,1) 1]);
    out(:,1)=temp1(:);
    out(:,2:end)=repmat(temp,[le 1]);
end    
end

把以上内容写入ndimidx.m 文件保存


调用函数,第一个参数填入的坐标向量,第二个参数填入维数

如过坐标有m个可选值,共有n维,那么返回的是m^n行n列的矩阵

>> a=ndimidx([2 3 4],2)


a =


     2     2

     2     3

     2     4

     3     2

     3     3

     3     4

     4     2

     4     3

     4     4

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lioceansea
2014-01-12
知道答主
回答量:55
采纳率:0%
帮助的人:11.3万
展开全部
EEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式