我想要通过Matlab代码运行一系列条件
Var1 = {'A1', 'B1'};
Var2 = {'A2', 'B2', 'C2', 'D2'};
Var3 = {2.5, 3, 3.5, 4, 4.5};
Var4 = {2E-6, 5E-6, 10E-6, 0.25E-3, 0.5E-3, 1E-3, 2E-3};
Var5 = {5, 10, 15, 20, 25, 30, 40, 50, 60, 70, 80, 90, 100, 125, 150, 200};
有没有一种简单的方法可以创建一个具有所有2 * 4 * 5 * 7 * 16组合的矩阵(或单元阵列)?
答案 0 :(得分:1)
结果需要是一个单元格数组,因为矩阵不能同时包含数字和字符串。
这个question and its answers实现了你想要的功能,但是使用矢量输入(而不是单元阵列输入)。所以你可以
代码:
%// Step 1:
vectors = {1:numel(Var1), 1:numel(Var2), 1:numel(Var3), 1:numel(Var4), 1:numel(Var5)};
%// Step 2:
n = numel(vectors);
combs = cell(1,n);
[combs{end:-1:1}] = ndgrid(vectors{end:-1:1});
combs = cat(n+1, combs{:});
combs = reshape(combs,[],n);
%// Step 3:
result = [Var1(combs(:,1)).' Var2(combs(:,2)).' Var3(combs(:,3)).' ...
Var4(combs(:,4)).' Var5(combs(:,5)).'];
在您的示例中,这会生成以下4480x5单元格数组:
result =
'A1' 'A2' [2.5000] [2.0000e-006] [ 5]
'A1' 'A2' [2.5000] [2.0000e-006] [ 10]
'A1' 'A2' [2.5000] [2.0000e-006] [ 15]
...
'B1' 'D2' [4.5000] [ 0.0020] [150]
'B1' 'D2' [4.5000] [ 0.0020] [200]