楼主: beyondcj
5210 11

[讨论交流] 请教一个matlab的一个数据处理问题 [推广有奖]

  • 7关注
  • 1粉丝

已卖:518份资源

博士生

38%

还不是VIP/贵宾

-

威望
0
论坛币
1133 个
通用积分
0.4507
学术水平
5 点
热心指数
7 点
信用等级
5 点
经验
12857 点
帖子
260
精华
0
在线时间
255 小时
注册时间
2011-5-18
最后登录
2017-8-1

楼主
beyondcj 发表于 2015-1-23 09:51:38 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
首先我是用matlab编程的,想请教的问题如下:
如果有一份数据非常大,比如有几百万行的数据,每一行的数据都有一个特点,固定格式例如‘adfad,fgtrfgrf,edgrth,reherh,hreh,rehgrrg’,都有固定的几个逗号隔开,逗号之间有的字符是固定长度的,有的不是,现在想拆分掉逗号,将逗号里面的数据提取出来,我用的是find函数,然后再赋值给元胞,可是这样花费的时间太长了,有没有在时间上更有效的方法?求请教,求拍脸

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:数据处理问题 MATLAB atlab matla 数据处理 matlab

回帖推荐

faruto 发表于10楼  查看完整内容

数据文件格式固定的话,可以尝试 textscan 想加速的话 就 把数据分块读入(matfile) + textscan + 并行处理(parfor 或 spmd)。 不过 你发帖 以及等待回帖 这段时间 ,撸个普通的 for循环 也已经搞定了。
已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
fantuanxiaot + 5 + 1 + 1 + 1 精彩帖子

总评分: 论坛币 + 5  学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

本帖被以下文库推荐

沙发
beyondcj 发表于 2015-1-23 10:20:15
其实时间也不是非常长,就是想有没有再短一点的
已有 1 人评分论坛币 收起 理由
fantuanxiaot + 5 精彩帖子

总评分: 论坛币 + 5   查看全部评分

藤椅
fantuanxiaot 发表于 2015-1-23 10:45:16
    如果你用R语言的话就好了。。。。。。。。。R语言有strsplit函数
    MATLAB可以用正则regexp函数,这个的学习是一个1~2个星期的时间,去网上找资料或者去李洋老师的FQuantToolbox里面找正则的学习资料

    但是 MATLAB有这样的数据处理函数,你可以不用担心
  1. str2double('1231123,123')
  2. ans =
  3.   1.2311e+009
  4. >>  str2double('123,123')
  5. ans =
  6.       123123
复制代码



板凳
fantuanxiaot 发表于 2015-1-23 10:59:33
加油加油!

报纸
beyondcj 发表于 2015-1-23 11:12:03
fantuanxiaot 发表于 2015-1-23 10:45
如果你用R语言的话就好了。。。。。。。。。R语言有strsplit函数
    MATLAB可以用正则regexp函数,这 ...
好的谢谢饭团君,还有问下就是同样是几百万行的数据,每一行的日期格式如果月份是单个的比如5,它数据里面就显示例如2012/5/4,我如何能用更短的时间将这么多行的日期同一改成'yyyy/mm/dd'这个格式呢,2012/5/4是什么格式形式

地板
fantuanxiaot 发表于 2015-1-23 11:14:02
beyondcj 发表于 2015-1-23 11:12
好的谢谢饭团君,还有问下就是同样是几百万行的数据,每一行的日期格式如果月份是单个的比如5,它数据里面 ...
  1. datestr('2012/5/4','yyyy/mm/dd')
复制代码
就这么方便
  1. ans =
  2. 2012/05/04
复制代码


7
beyondcj 发表于 2015-1-23 11:21:14
fantuanxiaot 发表于 2015-1-23 11:14
就这么方便
>> tic
datestr('2012/5/4','yyyy/mm/dd')
toc

这个结果
ans =

2012/05/04

Elapsed time is 0.005702 seconds.
几百万行速度太久了啊

8
fantuanxiaot 发表于 2015-1-23 11:35:29
beyondcj 发表于 2015-1-23 11:21
>> tic
datestr('2012/5/4','yyyy/mm/dd')
toc
..........................................................

10万才20.812389 seconds. datestr 是一个向量运算函数。
  1. clc
  2. clear all
  3. format compact
  4. tic
  5. a=repmat('2012/5/4',100000,1);
  6. g=datestr(a,'yyyy/mm/dd');
  7. toc
  8. Elapsed time is 20.812389 seconds.
复制代码


9
beyondcj 发表于 2015-1-23 12:11:25
fantuanxiaot 发表于 2015-1-23 11:35
..........................................................

10万才20.812389 seconds. ...
OK,谢谢饭团君

10
faruto 发表于 2015-1-23 13:44:21
数据文件格式固定的话,可以尝试 textscan

想加速的话 就 把数据分块读入(matfile) + textscan + 并行处理(parfor 或 spmd)。


不过 你发帖 以及等待回帖 这段时间 ,撸个普通的 for循环 也已经搞定了。
已有 2 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
见路不走 + 5 + 20 + 1 + 1 + 1 精彩帖子
fantuanxiaot + 5 + 12 + 3 + 3 + 3 精彩帖子

总评分: 经验 + 10  论坛币 + 32  学术水平 + 4  热心指数 + 4  信用等级 + 4   查看全部评分

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jr
拉您进交流群
GMT+8, 2025-12-29 13:29