如何筛选矩阵各列均值以上值并生成对应0-1矩阵(MATLAB)
矩阵列均值筛选生成0-1矩阵的实现(Matlab)
需求说明
给定一个4行5列的矩阵(行代表年份,列代表月份,存储月降水量数据),需完成以下操作:
- 计算矩阵每一列的平均值
- 将列中大于平均值的元素替换为1,小于等于平均值的元素替换为0
- 最终得到与原矩阵行列数一致的0-1矩阵
测试数据
生成测试矩阵的代码:
w = randi([1 12], 4,5)
生成的具体矩阵示例:
w = 1 12 1 8 9 9 3 11 3 10 8 2 8 12 1 2 1 7 8 10
实现代码
利用Matlab的向量化运算可以高效完成需求,代码如下:
% 按列计算平均值,得到1×5的均值行向量 col_avg = mean(w, 1); % 通过逻辑比较生成0-1矩阵(逻辑型转数值型) result = double(w > col_avg);
代码解释
mean(w, 1):指定维度1(列方向)计算均值,得到与原矩阵列数一致的行向量,Matlab的广播机制会自动将其扩展为与原矩阵同尺寸的矩阵,用于逐元素比较。w > col_avg:逐元素比较矩阵元素与对应列的均值,生成逻辑矩阵(true对应大于均值,false对应≤均值)。double():将逻辑矩阵转换为数值矩阵,true转为1,false转为0。
预期输出
运行上述代码后,得到的0-1矩阵与示例一致:
result = 0 1 0 1 1 1 0 1 0 1 1 0 1 1 0 0 0 1 1 1
内容的提问来源于stack exchange,提问作者Sorena
相关产品推荐
相关产品推荐

