如何计算含类别列的.txt文件中各类别的均值向量?
解决类别均值向量计算的问题
嘿,你完全说对了——不能直接用mean(MyImage),因为你的数据里混了分类标识(类别、真实标签)和需要计算均值的特征(X、Y、像素强度),直接全局求均值会把无关的标识列也算进去,结果根本不是你想要的每个类别的特征均值向量。
下面是具体的实现步骤和MATLAB代码,帮你分别计算类别0和类别1的均值向量:
步骤说明
- 先把txt文件里的数据读取成结构化的数值矩阵
- 按第一列(类别列)把数据分成两组:类别0的样本、类别1的样本
- 对每组样本,只提取需要计算均值的特征列(X、Y、像素强度,也就是第3、4、5列)
- 分别计算每组特征列的均值,得到对应类别的均值向量
代码实现
% 打开并读取基础.txt文件 testFile = fopen('基础.txt', 'r'); % 按5列格式读取所有数值,转置后变成每行对应一个样本的矩阵 data = fscanf(testFile, '%f', [5, inf]); data = data'; fclose(testFile); % 按类别筛选数据 class0_samples = data(data(:, 1) == 0, :); % 提取所有类别为0的样本 class1_samples = data(data(:, 1) == 1, :); % 提取所有类别为1的样本 % 计算类别0的均值向量(仅针对X、Y、像素强度列) mean_vec_class0 = mean(class0_samples(:, 3:5)); % 计算类别1的均值向量 mean_vec_class1 = mean(class1_samples(:, 3:5)); % 可选:如果需要把真实标签列也纳入均值计算(不过标签一般是离散值,均值意义不大) % mean_vec_class0 = mean(class0_samples(:, 2:5)); % mean_vec_class1 = mean(class1_samples(:, 2:5));
额外说明
- 代码里用
data(:, 1) == 0这种逻辑索引,能快速筛选出对应类别的所有样本,比循环高效很多 - 如果你的真实标签列是用来验证分类结果的,一般不需要把它纳入均值计算,所以我们只取了第3到5列的特征来求均值
- 运行后
mean_vec_class0和mean_vec_class1就是你要的两个类别各自的均值向量,每个向量包含X、Y、像素强度三个特征的均值
内容的提问来源于stack exchange,提问作者JetsYanks08
相关产品推荐
相关产品推荐

