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