MATLAB中一些数字的所有可能组合矩阵:如何在维数上具有通用性

MATLAB中一些数字的所有可能组合矩阵:如何在维数上具有通用性,matlab,Matlab,考虑一个大小为lx1的MATLAB单元U,其中每个子单元是一个报告一些数字的gxk矩阵。我想构造一个大小为gx1的单元T,其中每个子单元G是一个K^lxl矩阵,报告所有可能的L-元组,来自U{1}(G,:),U{2}(G,:),U{L}(G,:)。 例如,考虑 L=3; G=5; K=4; %U=cell(L,1); U{1}=randn(5,4); U{2}=randn(5,4); U{3}=randn(5,4); T=cell(G,1); for g=1:G U1=U{1}(g,:)

考虑一个大小为
lx1
的MATLAB单元
U
,其中每个子单元是一个报告一些数字的
gxk
矩阵。我想构造一个大小为gx1的单元
T
,其中每个子单元
G
是一个
K^lxl
矩阵,报告所有可能的
L
-元组,来自
U{1}(G,:)
U{2}(G,:)
U{L}(G,:)
。 例如,考虑

L=3;
G=5;
K=4;
%U=cell(L,1);
U{1}=randn(5,4);
U{2}=randn(5,4);
U{3}=randn(5,4);
T=cell(G,1);
for g=1:G
    U1=U{1}(g,:);
    U2=U{2}(g,:);
    U3=U{3}(g,:);
    [ca, cb, cc] = ndgrid(U1, U2, U3);
    T{g} = [ca(:), cb(:), cc(:)]; 
end
如何将此代码推广到任何
L


我想我可以使用并修改问题的答案,但我正在努力设置输入变量。

我稍微调整了以下解决方案:


这是否符合您的要求?

我稍微调整了以下解决方案:


这就是你想要的吗?

谢谢。我已经添加了我想要的。我认为这个问题与另一个问题不同,值得单独回答。我想你的意思是循环中的
U{1},U{2},U{3}
?无论如何,您也可以将
U1、U2、U3
视为一个矩阵,其中
ndgrid
将以每列为单位(我认为,输出大小至少是正确的),因此您可以将所有单元格中的所有相关列连接到一个矩阵中。谢谢。我已经添加了我想要的。我认为这个问题与另一个问题不同,值得单独回答。我想你的意思是循环中的
U{1},U{2},U{3}
?无论如何,您也可以将
U1、U2、U3
视为一个矩阵,其中
ndgrid
将按列计算(我认为,输出大小至少是正确的),因此您可以简单地将所有单元格中的所有相关列连接到一个矩阵中。
L=3;
G=5;
K=4;
U=cell(L,1);
U = cellfun(@(x) {randn(G,K)}, U);
T=cell(G,1);
for g=1:G
    Cin = cellfun(@(x) {x(g,:)}, U);
    Cout = cell(L,1);
    [Cout{:}] = ndgrid(Cin{:});
    Cout = cellfun(@(x) {x(:)}, Cout);
    T{g} = [Cout{:}];
end