zoukankan      html  css  js  c++  java
  • [Matlab]一个数据集的处理

    昨天帮同学用matlab 处理一个数据,一开始提了需求感觉很好实现啊但上手一弄弄了俩小时,很是蛋疼

    1.数据集

    有以下数据,以矩阵形式存放在matlab中:

    可以看出第七列中间缺了一些数,而且每个数是第七列最大能达到50,然后循环往复,一桶油76000+行数据

    2.需求

    需求就是在顺序空缺处加入一个除第七列以外的全零列,如下:

    使其变得顺序完整

    3.思路

    一开始想着直接在原矩阵上动手,发现逻辑有点复杂。1-50中间还好说,但再加上一个50到1的判断着实有些烧脑,所以分批处理吧。将大矩阵分成每个序号都是由小到大的排列的小矩阵放入一个CELL中然后挨个处理,最后再合并这个CELL。

    4.实现

    load dataCondence
    clearvars -except DATA_Original
    
    BatchMat  = [];
    
    kk = 1;
    ll = 1;
    %矩阵拆分
    while 1
    
        while DATA_Original(kk+1,7)-DATA_Original(kk,7)>=0
            if kk<(size(DATA_Original,1)-1)
                BatchMat = [BatchMat;DATA_Original(kk,:)];
                kk = kk + 1;
            else 
                break;
            end
        end
        
        BatchMat = [BatchMat;DATA_Original(kk,:)];
        CellMat{ll} = BatchMat;
        BatchMat = [];
        ll = ll+1;
    
        kk = kk+1;
        if kk==(size(DATA_Original,1))
            break;
        end
    
    end
    %处理小矩阵
    for nCycle = 1:numel(CellMat)
        DATA = CellMat{nCycle};
        iterMat  = [];
        orderMat = [];
        curOrder = 0;
        %处理开头序列
        if DATA(1,7) ~= 1
            for j=1:DATA(1,7)-1
                orderMat = [orderMat;curOrder+1];
                curOrder = curOrder + 1;
            end
            curOrder = 0;
            iterMat = [iterMat;[zeros(DATA(1,7)-1,6),orderMat,zeros(DATA(1,7)-1,6)]];
            orderMat = [];
        end
        %处理中间数据
        for i = 1:size(DATA,1)-1
            iterMat = [iterMat;DATA(i,:)];
            if DATA(i+1,7)-DATA(i,7) > 1
                diff = DATA(i+1,7)-DATA(i,7)-1;
                curOrder = DATA(i,7);
                if diff~=0
                    for j=1:diff
                        orderMat = [orderMat;curOrder+1];
                        curOrder = curOrder + 1;
                    end
                    curOrder = 0;
                    iterMat = [iterMat;[zeros(diff,6),orderMat,zeros(diff,6)]];
                    orderMat = [];
                end
            end
    
        end
        iterMat = [iterMat;DATA(i+1,:)];
        CellMat_NEW{nCycle} = iterMat;
    end
    %合并矩阵
    CombMat = [];
    for i = 1:numel(CellMat_NEW)
        CombMat = [CombMat;CellMat_NEW{i}];
    end
    

    5.问题

    在处理过程中,发现开头和结尾的判断实在有些绕,而且以前很多程序在边界处都是最容易出错的,有时间得总结一下这类数据的边界处理问题。

  • 相关阅读:
    转】Linux下安装Tomcat服务器和部署Web应用
    转】数据描述的三个领域
    怎样在嵌入式产品中应用键值存储数据库
    图片预览插件 fancyBox
    请别昧着良心说自己的文章是原创
    学习制作操作系统 0
    HDOJ 5276 YJC tricks time multimap
    日版 Galaxy Note sc05d 涮机
    Android 自己实现 NavigationView [Design Support Library(1)]
    用标准Struts2+mvc写的用户管理
  • 原文地址:https://www.cnblogs.com/virter/p/9018085.html
Copyright © 2011-2022 走看看