matlab中计算大批量数据的和

一、前言

matlab中计算数据的和有2种方式,一是“循环配合加法”计算,二是通过sum()来计算。

二、问题和原因

最近我需要在matlab中计算一个33696000行的列向量的和,发现通过前言中所述的两种方式求得的和结果不一样。经过一番搜索后发现:在MATLAB中,对大型列向量使用+运算符手动求和与内置的sum函数结果不一致的原因通常与浮点数精度误差求和算法差异有关。具体原因可能如下:

  1. 浮点数精度限制

    (1)计算机使用有限位数(如双精度约16位十进制)表示浮点数。当累加大量元素时,舍入误差会累积,尤其是元素数量级差异较大时。(2)手动循环累加(s = s + v(i))可能因顺序相加导致更大的误差,而sum函数内部使用成对求和(Pairwise Summation)算法,将误差从 O(n)O(n) 降至 O(log⁡n)O(logn),结果更精确。
  2. 数据类型问题

    若向量为单精度(single),手动累加时可能无意中转为双精度(double),而sum返回单精度结果,导致差异。
  3. 特殊值干扰

    若向量包含NaNInfsum会直接返回NaNInf,而手动累加若未正确处理这些值,结果会不同。

因为我的向量中不包含NaN或Inf,所以应该是原因1和2更可能些,于是我尝试将向量转为双精度,之后发现2种方法所计算的和结果相差不大。

三、解决

大批量数据求和还是优先使用sum()吧,一点点差异也能接受。

注:以上内容为日常学习记录,如侵则删。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值