如何在MATLAB中按用户ID从元胞数组为每个用户选2个随机样本
如何在MATLAB中为每个用户ID随机选取指定数量的样本
这问题我之前处理类似需求时也碰到过,用循环结合索引筛选+随机排列的方式就能轻松实现,给你一套完整的解决方案:
完整实现代码
% 初始化存储结果的空元胞数组 C = {}; % 定义每个用户需要选取的样本数量 sample_count = 2; % 遍历每个唯一用户ID for idx = 1:length(B) current_user = B{idx}; % 筛选出当前用户在A中的所有样本行索引 user_rows = strcmp(A(:, 1), current_user); % 获取当前用户的全部样本 user_samples = A(user_rows, :); % 生成随机不重复的索引,选取指定数量的样本 random_idx = randperm(size(user_samples, 1), sample_count); % 将选中的样本追加到结果数组C中 C = [C; user_samples(random_idx, :)]; end
代码逻辑解释
- 初始化与参数定义:先创建空元胞数组
C存最终结果,sample_count设置为你需要的2个样本数,后续要改数量直接改这个值就行。 - 遍历唯一用户:逐个处理
B里的每个用户ID,确保每个用户都能被单独处理。 - 筛选用户样本:用
strcmp匹配A的第一列和当前用户ID,得到该用户所有样本的行索引,从而提取出专属样本集。 - 随机选样本:
randperm(n, k)函数会生成1到n之间k个不重复的随机整数,用它来从用户的样本集中随机挑出指定数量的样本,保证每次运行结果都不一样且不会重复选同一样本。 - 拼接结果:把每个用户选中的样本拼接到
C里,最终得到所有用户的随机样本集合。
这个方案适用于每个用户样本数≥需要选取的数量的情况,完全符合你的需求~
内容的提问来源于stack exchange,提问作者kevin2019
相关产品推荐
相关产品推荐

