You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 18:23:28