当前位置:
文档之家› 基于MatLab的海量数据处理方法
基于MatLab的海量数据处理方法
Class
Nun/aw
TP391
1
引言
MatLab是一种得到广泛应用的科学计算软件。其全称
还可以自定义数据类型。Char、uim8、ira8型数据占用1个 字节,intl6、uintl6型数据占用2个字节,int32、uint32型数 据占用4个字节。single型数据占用4个字节,int64、 uint64、double型数据占用8个字节,复数型数据占用的字
very
eaae
Iong if the data
anloLint
is very
Iarge.Matrix oomputation is used
in
reduce data processing duration instead 0f loop computation in such
to
since matrix computation is very efficient
1
4)计算F可夏可万面{面万厕
2.073f“,一-010-1,-I
荟
岛,得
够,再分析数据,发现放大后的数据除以5,则角速度数据 均小于128,于是决定采用int8型数据,这样所需存储空间 只需21G。经过这样的数据转换,最终,所需要的数据存储 空间缩小为原来的1/8。 2)扩大实际内存空间。一是通过增加内存条实现,二 是通过增加虚拟内存实现。增加虚拟内存就是将硬盘上的 存储空间分配出一部分做内存使用。经过这两种方法扩大 实际存储空问,是完全可以满足21G的存储要求的。 解决了存储空间的问题后,就可以运行程序了,现在 (下转第103页)
3海量数据处理的一些方法
海量数据的处理要综合考虑计算机的运行速度、计算 机内存、MatLab能够创建的矩阵最大维数这三个方面的因 素。CPU主频越高,数据处理速度越快。计算机内存越 大,能够在程序运行过程中创建的矩阵维数也越大,64位 的MatLab比32位MatLab能够创建的矩阵维数要大。在 数据量较小的情况下,比如M级数据,如果不是涉及到很 复杂的运算,可以通过建立单维数组的方式,通过采用for 或者while循环处理。这种数据处理的特点是,不需要创 建维数巨大的矩阵,不用进行矩阵运算,因此不需要占用较 大的内存空间,但是数据处理效率较低,程序运行时间将比 直接进行矩阵运算的程序要长。 但是当数据量特别大,或者循环次数特别巨大的时候, 这时候如果还用循环的方式,数据处理程序运行的时间将 会非常长,特别是对于在普通PC机上运行MatLah程序的 用户来说,这个时间将是难以接受的,有的甚至达到几十个 小时。这时候,就必须考虑对算法进行优化,也就是说尽量 避免使用循环结构设计算法,而要尽量构建矩阵,将循环运 算以矩阵运算的形式代替,从而充分利用MatLab矩阵运 算效率高的优点。这时候,很多情况下,需要构建的矩阵维 数将是非常巨大的。比如读进一个数据文件,该文件数据 持续时间4h,数据频率为10Hz,总计数据点数为144000, 如果要采用for循环处理数据,假设嵌套了一层for循环. 则最里层for循环命令需要执行的总次数为1440002,即 2.0736e+010次,将近21亿次,如果在一台普通PC机上 运行这个程序,将需要几十个小时,等待结果的时间将是非 常漫长的。因此必须考虑将{or循环转化为矩阵运算。下 面以具体实例分析。 实例:计算一个数据频率为10Hz,数据持续时间为4h 的北斗卫星导航系统定位数据的Allan方差。该样本数据 点总数为1440002,即2.0736e+010。
Origin为行数组。存储北斗卫星导航系统定位纬度数据,通过rep一 “mt命令构建初级预备矩阵
for kk=l:len
R—FOG(kk,。circshift(R—FOG(kk。:).E0—1*kk+1]); end;%%%通过对R FOG进行逐行移位运算。构建群数组 的预备矩阵
for m=2:length(count_sample)
a
Matl.ab.but matrix
pro-
computation needs more memory.Several ways
extend memory space are discussed via
computation example・and it verifies that less
cessing time is ueeded if more memory is allocated to data matrix in the data processing algorithm. ‰V Words MatLab,massive da协,space,time,matrix computation,memory
kind of software for science computation wlanufactured by Mathworks Inc.Loop commands often happens that
are
usually used
during data processing.and
tO
it
processing duration is
1)构建群数组∞群数组中每个数组中数据持续时间
为0.1×女,女一1,2,…,1.0368e+010,这样的群数组共有 1.0368e+010个: 2)计算群数组中每个数组的均值,以均值为数组元 素,构建新的数组(n,),数组元素个数为2.0736e+010一k
+1;
3)对{吗}进行二次微分,得到新数组为{西}。{岛}元素 个数为2.0736e+010一女一1;
FOG—Primary—Arห้องสมุดไป่ตู้ay(1:len—m+1,:)=R—FOG(1:I∞一m+ l,1:m)1%%%构建群数组
end;
显然,算法经过改进后,取消了嵌套{or循环,for循环 的次数减少近144000倍。但是,另外一个问题出现了,即 如何创建144000x 144000的矩阵。记144000×144000的 矩阵为{M,}。如果A毛为双精度数据,则创建这么一个矩 阵占用的空间为:2.0736e+010×8个字节.大约需要168G 的连续存储空间.郎在内存中需要开辟约168G的存储空间
的矩阵维数为sqrt(2”~1);计算机分配给MatLab的内存
空间可以通过在命令行中运行memory查看,memory命令 运行结果显示的是MatlJab能够利用的最大的内存空间,
MatLab数值数据类型与最大矩阵维数
MatLab数值数据类型包括:无符号整型(uint8),有符
由于MatLab在创建矩阵时所有的元素是放置在一片连续
用的字节一矩阵占用的内存空间。总的来说.64位的Mat—
Lab能够创建的最大矩阵维数比32位的MatLab要大,
MatLab能够利用的连续存储空间越大,则能创建的最大矩
阵维数也越大。矩阵中元素所占字节越少,则能创建的最大
-收穑日期:2011年11月10日,修回日期:2011年12月20日 基金项目:海军大连舰艇学院科研发展基金资助。 作者简介:周红进,男,搏士,讲师,研究方向:惯性导航技术及卫星导航技术应用。王秀森。男。硬士,副教授,研究方向:导航仪器智能 化。
总第271期 2012年第5期
计算机与数字工程
Computer&Digital Engineering
VoL 40 N0.5
89
基于MatLab的海量数据处理方法。
周红进王秀森
(海军大连舰艇学院航海系大连116018)
摘要MatLab是MathWorks公司推出的一种科学计算软件,在使用MatLab进行数据处理过程中,常常会用到循环语句逐点处理 数据.当数据量巨大时。经常会出现耗时长久的情况。将循环运算转换为矩阵运算,充分利用MatImb高效率的矩阵运算特点。可以缩短数 据处理时间。通过一个算例分析了创建大容量矩阵的方法:如扩大内存空间、采用短字节数值数据类型等。算例运行结果表明,通过分配更 多的内存空间进行大容量矩阵运算,可以显著缩短数据处理的时间,从而实现空间换时间的目的。 关键词MatLab;海量数据;空间;时问;矩阵运算;内存 中围分类号TP39l
2.53GHz,内存为2G的普通PC机上实际运行发现,耗时
20个小时以上。因此必须重新设计算法。 这个算例中,外层{or循环无法采用矩阵运算替代,只 能考虑将内层for循环采用矩阵运算替代。其方法是一次 性构建预备数组,即将144000个数据点存为一个行数组, 使用repmat命令构建一个144000×144000的矩阵,然后 利用for循环使用drcshift命令对构建的矩阵进行数据移 位,这样做的耳的是为了构建群数组不再通过嵌套for循 环实现,而是直接通过矩阵运算实现。具体命令如下: RFOG=repmat(R—FOG—Origin,[1en,1])}%%%R—FOG—
用于创建矩阵{M,},当前普通PC机根本无法满足这个要
求,即使内存空间能够满足,32位的MatLab也无法表示这 个矩阵。因此首先必须安装64位的MatLab,然后考虑解 决存储空间的问题。通过两个途径解决存储空间的问题: 1)在数据精度满足计算要求的情况下改变数据类型。 实际上一般的数据运算精度不需要双精度。单精度数据即 可以满足要求。采用单精度数据类型,需要的存储空间约 为84G,还是不够。通过分析北斗卫星导航系统定位纬度 数据,由于采集的是静止状态下的纬度数据,纬度整数部分 不变,小数部分数据绝对值小于1,小数点j舌数据为4位,于 是将角速度数据放大10000倍,将数据变为整型数据,2个 字节即可以表示,这样就只需要42G的存储空间。但还不
为Matrix Laboratory,尤其擅长进行矩阵运算口“]。也就
是说在使用MatLab进行科学计算时.MatLab进行矩阵运
节为实部和虚部占用字节之和,矗、一inf、NaN占用1个字
节。
算的效率最高。利用MatLab处理数据时。常常需要对每
一个数据点进行同样的运算,一般情况下都会直接使用循 环运算,这样做的优点是数据处理算法实现直接明了。当 数据量很大时.则会耗时长久,有时甚至达到几十个小时, 即使采用运算频率更高的CPU,耗时也不会有显著改