如何处理大规模的快数据集

大数据指的是创建的数据和供分析的数据的数量与速率迅速增加。

此趋势的主要驱动因素是不断增加的信息数字化。采集设备的数量和类型以及其他数据生成机制无时无刻不在增加。

大数据源包括来自仪表传感器、卫星和医疗图像的流数据,来自安全摄像机的视频以及派生自金融市场和零售运营的数据。上述来源的大数据集可以包含千兆字节或百万兆字节的数据,并且每天以兆字节或千兆字节的级别增长。

大数据使分析师和数据专家有机会获得更好的见解,进行更明智的决策,但是它同时也会带来许多的挑战。可用的内存可能无法足以处理大数据集,可能需要花太久的时间进行处理或可能流动太快而无法存储。标准算法通常不能以合理的时间或内存来处理大数据集。没有任何一种单一方法可以处理大数据。为此,MATLAB 提供了许多工具来解决这些挑战。

在 MATLAB 中处理大数据

  1. 64 位计算。64 位版本的 MATLAB 可迅速增加内存中可保留的数据量——通常可达到任意 32 位程序的 2000 倍。32 位程序限制您只能使用 2 GB 的内存,而 64 位 MATLAB 的内存可以达到操作系统的物理内存限制。对于 Windows 8,台式机内存为 500 GB,Windows Server 内存为 4 TB。
  2. 内存映射的变量。 借助 MATLAB 中的memmapfile 函数,您可以将文件或文件的一部分映射到内存中的 MATLAB 变量。这样,您就可以高效访问磁盘上由于太大而无法保留在内存中或需要花太长时间而无法加载的大数据集。
  3. 磁盘变量。matfile 函数使您可以直接从磁盘上的 MAT 文件访问 MATLAB 变量(使用 MATLAB 索引命令),无需将全部变量加载到内存。这使您可以在大数据集上进行块处理,这些大数据集因为太大而无法保存在内存中。
  4. 内在的多核数学。MATLAB 中的许多内置数学函数,如fftinveig 都是多线程的。通过并行运行,这些函数充分利用计算机的多核,提供高性能的大数据集计算。
  5. GPU 计算。如果您正在使用 GPU,Parallel Computing Toolbox 中的GPU 优化的数学函数可以为大数据集提供更高的性能。
  6. 并行计算。Parallel Computing Toolbox 提供 并行 for 循环 , 该循环在多核计算机上并行运行您的 MATLAB 代码和算法。如果您使用MATLAB Distributed Computing Server,则可以在机器群集上并行执行,这些机器可扩展到数千台计算机。
  7. 云计算。对于数百或数千台计算机的按需并行处理,您可以在Amazon Elastic Computing Cloud(亚马逊弹性计算云)(EC2) 上使用 MATLAB Distributed Computing Server 并行运行 MATLAB 计算。借助云计算,您无需购买或维护您自己的群集或数据中心就可以处理大数据。
  8. 分布式阵列。 使用 Parallel Computing Toolbox 和 MATLAB Distributed Computing Server,您可以处理分布在计算机群集内存中的矩阵和多维数组。使用此方法,您可以针对因太大而无法由单台计算机内存处理的大数据集,进行存储和执行计算。
  9. 流式算法。 使用系统对象,您可以对因太大或太快而无法保留在内存中的数据传入流执行流式处理。此外,您还可以使用MATLAB Coder 通过 MATLAB 算法生成嵌入式 C/C++ 代码,并针对高性能实时系统运行产生的代码。
  10. 图像块处理。使用Image Processing Toolbox中的blockproc函数,您可以处理特别大的图像,方法是每次以模块的形式高效处理它们。与 Parallel Computing Toolbox 一起使用时,在多核和 GPU 上并行运行计算。
  11. 机器学习。机器学习有助于通过大数据集提取见解和开发预测性模型。广泛的机器学习算法,包括Statistics and Machine Learning Toolbox 和Neural Network Toolbox 中提供的促进式 (boosted) 和袋装 (bagged) 决策树、K 均值和分层聚类、k-最近邻搜索、高斯混合、期望最大化算法、隐马尔可夫模型和神经网络。

示例与具体方法

  • 使用 MATLAB 处理大数据42:23(网络讲座)
  • 利用 PCT 和 MDCS 进行内存中的大数据分析(博客)
  • 用于可视化大型数据集的 Plot(大型)函数(文件交换)
  • 使用 memmapfile 导航“大数据”二进制文件(Loren 谈 MATLAB 技巧博客)
  • 处理“特别大的”图像:块处理(Steve 谈图像处理博客
  • 使用系统对象进行 MATLAB 中的流式处理(概述)
  • Using Distributed Arrays to Process Large Matrices7:36(视频)
  • 使用 SPMD 和分布式阵列求解大规模线性代数问题(文章)

应用示例

  • Tesco 使用 Supply Chain Analytics 一年节省了一亿英镑(文章及相关)
  • How Weather and Pricing Affect Sales: Using MATLAB to Improve Tesco's Supply Chain23:51
  • Naturalistic 汽车驾驶数据处理和分析(文章及相关 )
  • Data Processing Framework Supporting Large-Scale Driving Data Analysis30:38
  • Listening to the World's Oceans: Searching for Marine Mammals by Detecting and Classifying Terabytes of Bioacoustic Data in Clouds of Noise51:32(网络讲座)
  • Edwards Air Force Base 加速了大规模飞机测试数据的分析(用户案例)
  • 通过高性能计算进行地震数据处理(概述)
  • 生态系统如何影响区域气候建模(文章)

软件参考

  • 在 MATLAB 中高效使用内存的策略(文档)
  • MATLAB 中内存映射概述(文档)
  • 大型 Multi-Entry 文本文件(FASTA、FASTQ、SAM)(文档)
  • Image Processing Toolbox 中的相异块处理(文档)

====================================================================================

上面是matlab官网的一些相关介绍。

其中在编程中用到的几个重要函数:

1、Matlab内存映射文件

在maltab程序中,经常需要读取一些.mat格式的数据文件,如果文件非常大,内存装不下或者加载时间过长,我们可以通过matlab提供了内存映射文件机制(memroy mapped file)[1]来解决这一问题。内存文件映射是一种内存管理方法,应用程序可以通过内存指针对磁盘上的文件进行访问,从而不需要预先将整个文件加载到内存中去。

Matlab内存映射文件的语法格式如下:

m = memmapfile(filename)

m = memmapfile(filename, prop1, value1, prop2, value2, ...)

memmapfile(filename)创建了一个默认参数的内存映射文件,而m = memmapfile(filename, prop1, value1, prop2, value2, ...)创建一个指定参数的内存映射文件,参数设置见下表1,最后一列Default表示参数默认值,其中Repeat属性中的inf表示顺序读取文件直至文件末尾,映射的内存数据可通过m.Data属性来访问。

表1. Matlab memmapfile参数列表

调用示例:

首先创建一个5000*1维的double数组并保存,gallery是一个maltab测试函数,返回给定参数的测试数组。

randData = gallery('uniformdata', [5000, 1], 0, 'double');
fid = fopen('records.dat','w');
fwrite(fid, randData, 'double');
fclose(fid);

Example 1 创建默认内存映射文件

m = memmapfile('records.dat');

Example 2 创建指定参数的内存映射文件

设置offset、Format和Writeble属性,,注意最后得到了一个9744*1的uint32数组,总共是38976字节,加上offset刚好等于5000个double数组的总字节数。

m = memmapfile('records.dat',         ...'Offset', 1024,        ...'Format', 'uint32',    ...'Writable', true);

Type the object name to see the current settings for all properties:

m =Filename: 'd:\matlab\records.dat'Writable: trueOffset: 1024Format: 'uint32'Repeat: InfData: 9744x1 uint32 array

Example 3 映射对象

将record.dat文件映射成对象,该对象拥有一个4*10*8 uint32数组成员,变量名为x,,可以通过m.Data(*).x进行访问,*表示index.

m = memmapfile('records.dat',    ...'Offset', 1024,   ...'Format', {'uint32' [4 10 18] 'x'});A = m.Data(1).x;whos AName      Size                     Bytes  ClassA        4x10x18                   2880   uint32 array

Example 4 映射复杂对象

复杂对象拥有model,serialno,expenses三个属性,读取1000次。

m = memmapfile('records.dat',                   ...'Format', {                      ...'int16'  [2 2] 'model';       ...'uint32' [1 1] 'serialno';    ...'single' [1 3] 'expenses'},   ...<strong>'Repeat', 1000</strong>);

2、硬盘访问.mat文件

Matlab程序中经常要访问.mat文件,通常在作法是用load函数直接加载.mat文件。如果.mat文件非常大,超过了系统可用内存的时候该怎么办呢?Matlab2013b为提供了matfile函数,matfile函数可以通过索引直接访问.mat文件中的Matlab变量,而无需将.mat文件加载入内存。

matfile有两种用法:
        m = matfile(filename),用文件名创建matfile对象,通过这个对象可以直接访问mat文件中的matlab变量。

m = matfile(filename,'Writable',isWritable),isWritable开启或关闭文件写操作。

使用示例:

1. 向mat文件中写入变量

x = magic(20);

m = matfile('myFile.mat'); % 创建一个指向myFile.mat的matfile对象

m.x = x; % 写入x

m.y(81:100,81:100) = magic(20); % 使用坐标索引

2.  加载变量

filename ='topography.mat';

m = matfile(filename);

topo = m.topo; %读取变量topo

[nrows,ncols] = size(m,'stocks'); %读取stocks变量的size

avgs = zeros(1,ncols);

for idx = 1:ncols

avgs(idx) = mean(m.stocks(:,idx));

end

3. 开启写权限

filename ='myFile.mat';

m = matfile(filename,'Writable',true);

或者

m.Properties.Writable = true;

3、处理任意大图像的blockproc函数

新版本的MATLAB推出了可以处理任意大图像的函数blockproc,其用法如下:

B = blockproc(A,[M N],fun)
B = blockproc(src_filename,[M N],fun)
B = blockproc(adapter,[M N],fun)
blockproc(...,param,val,...)

A是要处理的图像矩阵,如果图像太大不能完全导入内存,也可以用图像文件名src_filename来表示。[M,N]是希望每次分块处理的矩阵大小,fun是函数句柄,即对每块矩阵的处理函数。
需要说明的是blockproc默认支持tiff/tif和jpeg2000格式的任意大图像处理,如果要读取其他格式的大图像需要针对该图像格式再写一个继承自MATLAB中ImageAdapter这个抽象类的子类adapter,来满足blockproc的输入要求。MATLAB帮助文档中有一个读取lan格式的LanAdapter示例类,大家可以参照那个格式来构造任意图像格式的Adapter类来实现blockproc函数对任意大图像文件的支持。
最后一种调用格式可以实现读取大图像文件,分块处理后再在指定路径写入处理后的图像文件,这个非常有用。

fun = @(block_struct) repmat(block_struct.data,5,5) ;
%注意处理函数的输入必须是结构体,其data域是我们的矩阵数据,这是由blockproc分块后的机制决定
blockproc('moon.tif',[16 16],fun,'Destination','C:\moonmoon.tif');
imshow('C:\moonmoon.tif')

可以看到分块处理后的效果,当然这是简单的把原图像分块(每一子块大小16*16)复制了25倍后的效果。

4、nlfilter函数

功能:用来执行通用的滑动邻域操作。用法:
B = nlfilter(A,[m n],fun)
B = nlfilter(A,[m n],fun,P1,P2,...)
B = nlfilter(A,'indexed',...)
B = nlfilter(A,[m n],fun)对图像A的每个大小为m*n的patch进行fun函数的操作,patch的取法为滑动(sliding),即patch的中心像素遍历图像的每个点,当取到边界时需要进行边界延拓。fun必须是函数的句柄,可自由定义也可取matlab内置的函数。例如fun函数必须接受m*n块作为输入,并返回一个标量y,形如:
c=fun(x)
c为m*n块x的中心像素点的输入值。
例子:B = nlfilter(A,[3 3],@myfun);
其中myfun是以m文件如下:
function scalar = myfun(x)
scalar = median(x(:));

5、colfilter函数

调用格式:B = colfilt(A,[m n],block_type,fun)

意为将图像A重排成每列为m*n块拉成一列组成的临时矩阵,对该临时矩阵进行fun函数的操作。

例:

对图像的I的每个5*5邻域进行取标准差的运算 :I2 = uint8(colfilt(I,[5 5],’sliding',@std));

另:

在调用fun函数处理前,colfilt先调用了im2col生成了临时矩阵,调用fun函数处理之后,又调用col2im将成列的矩阵重排为块。

colfilt与blockproc及nlfilter相比,用法类似,但速度更快。

6、padarray函数

功能:填充图像或填充数组。
用法:B = padarray(A,padsize,padval,direction)
A为输入图像,B为填充后的图像,padsize给出了给出了填充的行数和列数,通常用[r c]来表示。padval和direction分别表示填充方法和方向。它们的具体值和描述如下:
padval:
'symmetric'表示图像大小通过围绕边界进行镜像反射来扩展;
'replicate'表示图像大小通过复制外边界中的值来扩展;
'circular'图像大小通过将图像看成是一个二维周期函数的一个周期来进行扩展。
direction:
'pre'表示在每一维的第一个元素前填充;
'post'表示在每一维的最后一个元素后填充;
'both'表示在每一维的第一个元素前和最后一个元素后填充,此项为默认值。
若参量中不包括direction,则默认值为'both'。若参量中不包含padval,则默认用零来填充。若参量中不包括任何参数,则默认填充为零且方向为'both'。在计算结束时,图像会被修剪成原始大小。
举例:
A = [1 2; 3 4];
B = padarray(A,[3 2],'replicate','post')

7、repmat

即 Replicate Matrix ,复制和平铺矩阵,是 MATLAB 里面的一个函数。repmat( )函数的作用主要是利用了类似分治算法构造矩阵的思想、给出一个小规模矩阵,按指定要求构造出一个大矩阵

B = repmat(A,m,n)
B = repmat(A,[m n])
B = repmat(A,[m n p...])
一、repmat(NaN,m,n)等价于NaN(m,n).
二、repmat(single(inf),m,n)等价于inf(m,n,'single').
三、repmat(int8(0),m,n)等价于zeros(m,n,'int8').
四、repmat(uint32(1),m,n)等价于ones(m,n,'uint32').
五、repmat(eps,m,n)等价于eps(ones(m,n)).

B = repmat(A,m,n)

将矩阵 A 复制 m×n 块,即把 A 作为 B 的元素,B 由 m×n 个 A 平铺而成。B 的维数是 [size(A,1)*m, size(A,2)*n] 。
>> A = [1,2;3,4]
A =
1 2
3 4
>> B = repmat(A,2,3)
B =
1 2 1 2 1 2
3 4 3 4 3 4
1 2 1 2 1 2
3 4 3 4 3 4
B = repmat(A,[m n])
与 B = repmat(A,m,n) 用法一致。
B = repmat(A,[m n p...])
B 是由 m×n×p×… 个 A 平铺而成的高维数组。B 的维数是 [size(A,1)*m, size(A,2)*n, size(A,3)*p, ...] 。
>> A = eye(2,2)
A =
1 0
0 1
>> B = repmat(A,[2 3 2])
B(:,:,1) =
1 0 1 0 1 0
0 1 0 1 0 1
1 0 1 0 1 0
0 1 0 1 0 1
B(:,:,2) =
1 0 1 0 1 0
0 1 0 1 0 1
1 0 1 0 1 0
0 1 0 1 0 1

8、左除和右除

在matlab中,如果有以下操作:

Inv(A)*B, 建议用左除A\B代替。

A*Inv(B),  建议用右除A/B代替。

A右除B,相当于A右乘B的逆矩阵,A左除B,相当于A的逆矩阵左乘B

MATLAB 处理大数据相关推荐

  1. 用matlab画大数据曲线_基于MATLAB的大数据分析

    王媚 摘要:传统计算机模式与MATLAB软件技术相比较,传统软件运行起来较为复杂.以此基于MATLAB软件下的网络数据技术,它以高速化.关联化的优势成为人们眼中的焦点.本文针对传统网络软件模式中出现的 ...

  2. 关于MATLAB处理大数据坐标文件

    原先有3000条测试数据,MATLAB表现出来强大的数据处理能力,十几秒就可以把数据分类.分装并储存,这次共有10万条坐标数据,MATLAB明显后劲不足,显示内存不足 自我认识:以前MATLAB数据处 ...

  3. matlab导入大数据时内存不足,MATLAB从Excel导入大量数据计算的时候出现错误

    function y = landslidepj(x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11) %UNTITLED 滑坡易发性评价 %   模糊综合评价对栅格单元进行评价,x ...

  4. 关于MATLAB处理大数据坐标文件2017529

    今天我们离成功又近了一步,因为又失败了两次 第一次使用了所有特征,理由:前天的特征使用的是取单个特征测试超过85分的特征,结果出现过拟合现象. 本次使用所有特征是为了和昨天的结果作比较. 结果稍好:比 ...

  5. 任艳频老师关于信息与大数据课题组的讨论材料的意见

    张老师好!各位老师好! 很高兴上周参加了信息与大数据课组的讨论,收获很大.从我有限的角度提出以下建议,仅供老师们参考: 课组跨度有点大,不容易聚焦.例如传感与检测部分,与电子学课组更接近,是否并入电子 ...

  6. 2015年获得大数据顶尖职位必备的9项技能

      在大数据商品化之前, 利用大数据分析工具和技术来取得竞争优势已不再是秘密.2015年, 如果你还在职场上寻找大数据的相关工作, 那么, 这里介绍的9种技能,将帮助你得到一个工作机会.       ...

  7. 大数据教父Micheal Stonebraker告诉你大数据的秘密

    微信公众号:微软研究院 class="video_iframe" height="502.5" width="670" frameborde ...

  8. 优秀大数据GitHub项目一览

    企业正在迅速用新技术武装自己以便从大数据项目中获益.各行业对大数据分析人才的需求也迫使我们升级自己的技能以便寻找更好的职业发展.  跳槽之前最好先搞清楚一个岗位会接触到的项目类型,这样你才能掌握所有需 ...

  9. 万字长文详解大数据应用实战案例-万亿级大数据监控平台建设方案

    前言 随着互联网业务的迅速发展,用户对系统的要求也越来越高,而做好监控为系统保驾护航,能有效提高系统的可靠性.可用性及用户体验.监控系统是整个运维环节乃至整个项目及产品生命周期中最重要的一环.百分点大 ...

最新文章

  1. python numpy矩阵乘法_高维Python-Numpy矩阵乘法
  2. .net core 常见设计模式-IChangeToken
  3. 用技术谱写美好生活,「亚马逊云科技线上黑客松2021」报名开启!
  4. 怎么保存php格式,把php代码保存到php文件实现方法
  5. linux获取文件名最后一位,获取出文件最后一位是1 或者0 若果都是1 代表是正确的 如果有0代表错误...
  6. C++使用using与typedef定义别名
  7. 【渝粤题库】陕西师范大学800006 世界地理
  8. 远程桌面/远程登陆中强行登陆(他人退出)与切换回话(登陆后切换到上次别的登陆)3389...
  9. Java 中的枚举 (enum)
  10. 计算机应用计算专业难吗,计算机应用专业好学吗
  11. vue自定义一个视频播放器
  12. Android Studio无法检测到魅族手机的解决方法
  13. react 移动端 h5 端日历组件 周日历 月日历 周视图 月视图
  14. 大数运算经典:棋盘上的米粒。
  15. 微信公众平台开发系列之必备知识
  16. 蓝桥杯2016年第七届真题-碱基
  17. 《编译原理》求短语,直接短语,句柄,素短语,最左素短语 - 例题解析
  18. wine下微信中文乱码修订
  19. 通许县中等职业学校计算机,2021通许县中等职业学校招生简章
  20. html网页怎么播放无损,无损音质和标准音质有什么区别

热门文章

  1. 51nod Vote 善意的投票
  2. 行业典型案例解读 | FASS全闪高性能文件网关解决方案
  3. PyQt5 实现矩阵计算器
  4. 【IBM Tivoli Identity Manager 学习文档】9 怎样自定义ITIM的界面
  5. 【 FPGA 】稳态与亚稳态小结
  6. java 去除警告_Java——警告消除
  7. 浅谈 Node.js 热更新
  8. 全球及中国阻燃剂市场供需现状与未来投资策略研究报告2022年
  9. Keras 之 LSTM 有状态模型(stateful LSTM)和无状态模型(stateless LSTM)
  10. python boxplot 多组_Matlab boxplot for Multiple Groups(多组数据的箱线图)