Matlab中如何指定向量在不定长度笛卡尔积中的重复次数?
解决MATLAB中指定向量重复次数的笛卡尔积问题
嘿,我完全懂你的需求——想用CARTPROD函数计算笛卡尔积,但不想手动重复写同一个向量多次作为输入,而是能灵活指定某个向量的重复参与次数对吧?其实不用手动硬写,有几个更简洁高效的方法:
方法1:用数组重复快速构造输入参数列表
CARTPROD的输入是多个向量,我们可以先把需要重复的向量生成一个重复的单元格数组,再和其他向量合并成完整的输入列表。举个例子:
假设你有向量v = [1,2],想让它重复3次,再和向量w = [3,4]一起计算笛卡尔积,代码可以这么写:
% 生成包含3个v的单元格数组 repeated_v = repmat({v}, 1, 3); other_vectors = {w}; % 合并所有输入并调用CARTPROD result = CARTPROD([repeated_v, other_vectors]{:});
这样就不用手动敲CARTPROD(v, v, v, w),只要修改repmat里的次数参数,就能轻松调整重复次数。
方法2:封装一个自定义包装函数
如果经常需要这种操作,不如自己写个小函数简化调用逻辑:
function result = cartprod_with_repeat(vectors, repeat_counts) % vectors: 单元格数组,每个元素是参与运算的向量 % repeat_counts: 对应vectors中每个向量的重复次数 input_list = {}; for i = 1:length(vectors) input_list = [input_list, repmat({vectors{i}}, 1, repeat_counts(i))]; end result = CARTPROD(input_list{:}); end
调用的时候就非常直观了:
v = [1,2]; w = [3,4]; % 指定v重复3次,w重复1次 result = cartprod_with_repeat({v, w}, [3, 1]);
额外小提示
要是你不想依赖第三方的CARTPROD函数,MATLAB R2020b及以后版本的Statistics and Machine Learning Toolbox里有内置的combinations函数,同样可以用重复构造输入的方式实现需求:
v = [1,2]; w = [3,4]; result = combinations(repmat({v}, 1, 3), w);
内容的提问来源于stack exchange,提问作者I.J. Abdul Hakeem
相关产品推荐
相关产品推荐

