如何用MATLAB的randi函数生成6个无重复的4维0-1向量?
生成不重复的4维0-1向量解决方案
方法一:全量抽样法(推荐)
4维0-1向量总共只有 (2^4=16) 种可能,直接生成所有组合后随机抽取6个不重复的,效率最高。
代码实现:
n = 4; % 生成所有4维0-1向量,每行对应一个向量 total_vectors = dec2bin(0:2^n-1) - '0'; % 随机选取6个不重复的向量索引 selected_idx = randperm(size(total_vectors, 1), 6); % 获取目标向量组 target_vectors = total_vectors(selected_idx, :); % 按需拆分到t1-t6变量 t1 = target_vectors(1,:); t2 = target_vectors(2,:); t3 = target_vectors(3,:); t4 = target_vectors(4,:); t5 = target_vectors(5,:); t6 = target_vectors(6,:);
代码说明:
dec2bin(0:2^n-1)生成0到15的二进制字符串,减去字符'0'后转换为数值矩阵,每行就是一个完整的4维0-1向量。randperm(m, k)生成1到m之间k个不重复的随机整数,用来抽取不重复的向量。
方法二:循环去重法
如果需要动态生成(比如维度更高、总组合数极大时),可以每次生成新向量后检查是否重复,直到凑够数量。
代码实现:
n = 4; need_count = 6; result = []; while size(result, 1) < need_count % 生成一个新的4维0-1向量 new_vec = randi([0,1], 1, n); % 检查当前向量是否已存在于结果中 if ~any(all(result == new_vec, 2)) result = [result; new_vec]; end end % 拆分到t1-t6变量 t1 = result(1,:); t2 = result(2,:); t3 = result(3,:); t4 = result(4,:); t5 = result(5,:); t6 = result(6,:);
代码说明:
all(result == new_vec, 2)逐行比较现有结果和新向量,返回每行是否完全匹配的逻辑值。any(...)判断是否存在重复向量,若不存在则将新向量加入结果矩阵。
内容的提问来源于stack exchange,提问作者Michaela Schnell
相关产品推荐
相关产品推荐

