2012-12-03 34 views
1

首先,這個問題很容易用for循環解決。然而,我試圖強迫/教導自己思考矢量智能以利用Matlab最擅長的優勢。通過向量中的索引尋址多個範圍

簡化,這是問題的解釋:

  • 我有一個在它的數據載體。
  • 我有一個2xN的開始/停止索引數組,表示向量中有趣數據的範圍。
  • 我想每個這些範圍進行計算,產生了一批(N結果,對應於每一個啓動/停止檔位。)

在代碼中,這裏有想什麼,我一個pseudoexample到在結尾處有:

A = 1:10000; 
startIndicies = [5 100 1000]; 
stopIndicies = [10 200 5000]; 
... 
calculatedResults = [func(A(5:10)) func(A(100:200)) func(A(1000:5000))] 

A,以及開始/停止索引數組的長度是可變的。

就像我說的,我可以很容易地用for循環來解決這個問題。但是,既然可以用於大型數據集,我想知道沒有for循環是否有一個好的解決方案。

回答

0

這裏是一個可能的解決方案,但是,我不會把它叫做完全矢量的解決方案,而不是一個一個襯墊之一。

out = cellfun(@(i,j) fun(A(i:j)), num2cell(startIndicies), num2cell(stopIndicies)); 

或者,如果你計劃有均勻的輸出,

out = arrayfun(@(i,j) fun(A(i:j)), startIndicies, stopIndicies); 
+0

第二項正是我一直在尋找。謝謝! – JoeyG