[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.問題

在處理過程中,發現開頭和結尾的判斷實在有些繞,而且以前很多程序在邊界處都是最容易出錯的,有時間得總結一下這類數據的邊界處理問題。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM