未定义长度的笛卡尔积Matlab

时间:2018-03-01 17:46:13

标签: matlab cartesian-product

有一个名为CARTPROD的可下载函数,它给出了给定向量的笛卡尔积 (link to CARTPROD function

例如

cartprod(1:3,1:3)

ans =
 1     1
 2     1
 3     1
 1     2
 2     2
 3     2
 1     3
 2     3
 3     3

但是,有没有办法可以指定在笛卡尔积中读取给定矢量的次数。我想要这样的东西:

%If user chooses the vector to be used 4 times
cartprod(1:3,1:3,1:3, 1:3)

%If user chooses the vector to be used 2 times
cartprod(1:3,1:3)

我已经尝试过考虑它,但除了手动之外,我无法想到这样做。谢谢!

2 个答案:

答案 0 :(得分:2)

您正在寻找的是comma separated lists。 Haven未对此进行测试,但请尝试

myvec={1:3,1:3,1:3,1:3}; 
cartprod(myvec{:}); %get cartprod of all vectors in the cell-array.

或者@Sardar_Usama指出,您可以将myvec={1:3,1:3,1:3,1:3}替换为:

n=4; %number of repeated vectors
myvec=repmat({1:3},1,n); %repeat cell-array {1:3} 4 times

答案 1 :(得分:1)

另一个答案指出了如何使用FEX中相同的cartprod功能。但是,还有另一个名为combvec的函数(来自神经网络工具箱)完全相同。

n = 4;  %Number of times to be repeated
myvec = repmat({1:3},1,n);    %Repeating the cell array vector
result = combvec(myvec{:}).'; %Converting to comma-separated list and applying combvec