2016-12-08 37 views
0

我在編寫一個MATLAB代碼時需要定位一個單元格陣列的每個單元格的最大值,vel_data1x430單元格,它包含多個excel表單,數據由M行×1列組成。我想提取最大值,以及該最大值之前和之後的每個值,直到第一個0達到新的單元陣列。在MATLAB的大單元陣列中定位多個零點值

例如如果數組中的第一個單元格爲[3 2 1 0 2 6 4 3 0 1 0],它將提取值[0 2 6 4 3 0],併爲數組中的每個單元格執行此操作。

我知道以下提取單元格數組的最大值,但我希望它能夠像我上面提到的那樣。

d=dir(f); 
for n=1:numel(d) 
    max_vel{n} = deal(max(vel_data{n})); 
end 

任何意見/示例代碼將非常感激。

回答

2

提取的第一個最大索引值爲idx。然後將所有元素的索引提取爲f1。元素的索引是0,緊接在最大值提取爲f2之前。而f3是元素的索引,該元素爲0並緊接在最大值之後。

vel_data = {[3 1 0 2 6 4 0 1 0] , [1 1 0 9 3 0 4 6 9]} 
for n=1:numel(vel_data) 
    data = vel_data{n}; 
    [~,idx] = max(data); 
    f1 = find(data==0); 
    if isempty(f1) 
     max_vel{n} = data; 
     continue; 
    end 
    f2 = find(f1 < idx,1,'last'); 
    f3 = find(f1 > idx,1); 
    if isempty(f2) 
     idx_first = 1; 
    else 
     idx_first =f1(f2); 
    end 
    if isempty(f3) 
     idx_last = numel(data); 
    else 
     idx_last =f1(f3); 
    end 
    max_vel{n} = data(idx_first:idx_last); 
end 
+0

我想我明白你的意思了。要在提取最大值後查找最後一個零和第一個零,首先將最大值編入索引,然後提取包含0的單元中的所有零,然後使用f2,f3提取兩個值。 – Shin

+0

問題是,我認爲這種方法,提取整個單元格數組的最大值,而我需要這個提取數組中每個單元格的最大值。此外,我第一次嘗試運行這個代碼產生了:使用horzcat的錯誤;從max_vel {n}行開始,連接的矩陣的維數不一致。 – Shin

+0

你能解釋更多關於數據嗎?如果您提供簡單的縮小大小示例和預期輸出,它非常有用。 – rahnema1