R语言如何实现矩阵各列按行减去另一单列矩阵的对应值
R中800×250矩阵逐列减去同长度列向量的实现方案
不需要逐列手动计算,用R内置的运算规则可以直接批量完成,两种常用高效实现如下:
直接利用R的向量广播特性(效率最高)
R做矩阵运算时会自动对齐维度,你当前两个对象行数都是800,直接相减时,R会自动把800×1的m2沿列方向复制250份,拼成和m1维度完全一致的矩阵后逐元素做减法,一行代码就能得到结果:res <- m1 - m2说明:哪怕
m2不是矩阵、只是长度为800的普通向量,这个写法也能正常生效,是日常处理这类运算最常用的写法。用
sweep()函数显式指定按行运算(逻辑最清晰)
如果担心隐式维度对齐出错,可以用专门针对数组边距运算设计的sweep()函数,明确指定按行维度做减法,可读性更强:# MARGIN=1 代表按行操作,逐行取出m1的值减去m2对应行的数值 res <- sweep(m1, MARGIN = 1, STATS = m2, FUN = `-`)这个写法通用性更好,后续如果需要改成按列减行向量,只要把MARGIN参数改成2即可,不需要调整其他逻辑。
结果校验可以取前几个元素手动核对:比如对比
m1[5, 10] - m2[5, 1]和res[5,10]的数值,确认一致就说明运算正确。
内容的提问来源于stack exchange,提问作者user19351102
相关产品推荐
相关产品推荐

