首页 > 解决方案 > MATLAB中某些数字的所有可能组合的矩阵:如何在维度上通用

问题描述

U考虑一个大小为 的 MATLAB 单元L x 1,其中每个子单元是一个G x K报告一些数字的矩阵。我想构建一个T大小为 的单元格G x 1,其中每个子单元格g都是一个K^L x L矩阵,报告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

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

标签: matlab

解决方案


我稍微调整了另一个主题的解决方案:

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

那会做你想要的吗?


推荐阅读