瑞恩的答案看起來像要走的路。但是如果你的條件是這樣的,你需要找到累計和不是360的行數,那麼你將需要做更多的工作。對於這種情況,你可以使用這個 -
試試這個矢量(無環路)的代碼來獲得,其中360組出現的行ID -
threshold = 360;
cumsum_val = cumsum(Turn);
ind1 = find(cumsum_val>=threshold,1)
num_events = floor(cumsum_val(end)/threshold);
[x1,y1] = find(bsxfun(@gt,cumsum_val,threshold.*(1:num_events)));
[~,b,~] = unique(y1,'first');
row_nums = x1(b)
之後,你可以獲取事件數據,如這 -
event1 = Turn(1:row_nums(1));
event2 = Turn(row_nums(1)+1:row_nums(2));
event3 = Turn(row_nums(2)+1:row_nums(3));
...
event21 = Turn(row_nums(20)+1:row_nums(21));
...
eventN = Turn(row_nums(N-1)+1:row_nums(N));
編輯1個
樣本案例:
我們創建了一個小數據20
隨機整數,而不是15000
用於原始問題。此外,我們使用30
的閾值而不是360
來解釋小數據大小。
代碼
Turn = randi(10,[20 1]);
threshold = 30;
cumsum_val = cumsum(Turn);
ind1 = find(cumsum_val>=threshold,1)
num_events = floor(cumsum_val(end)/threshold);
[x1,y1] = find(bsxfun(@gt,cumsum_val,threshold.*(1:num_events)));
[~,b,~] = unique(y1,'first');
row_nums = x1(b);
運行
Turn =
7
6
3
4
5
3
9
2
3
2
3
5
4
10
5
2
10
10
5
2
threshold =
30
row_nums =
7
14
18
運行結果顯示row_nums
爲7, 14, 18
,這意味着第二分組與Turn
第七屆索引開始,第三組開始在第14指數等等。當然,您可以在row_nums
的開頭追加1
來表示第一個分組從第一個索引開始。
感謝您的快速回復。 我曾嘗試過,但沒有奏效。它基本上給出了最後一行的數字(在這種情況下是15550),而在第10行的數值是360。所以我應該是第10行 – user3462307
你一定犯了錯誤。上面的代碼應該可以工作。看到我的結果張貼在答案中。 – Kavka
不知道它是什麼,但你是對的,現在第一部分工作。 – user3462307