2016-11-11 96 views
1

我在我的代碼中非常頻繁地使用numpy數組。它的速度和方便的索引規則非常有用。現在,我正在尋找如何避免'for'循環以加快執行時間。爲了簡單起見,我們假設,我們有兩個向量(名爲a和b),每個向量都有10個元素。第二個向量(b)的第一個值等於1,則每個第n個值等於'(b [n-1] * 13 + a [n])/ 14'。的幫助下「for」循環,我可以寫象下面這樣:迭代numpy數組而無循環

import numpy as np 
a = np.random.random(10) 
b = np.ones(10) 
for i in range(1, b.shape[0]): 
    b[i] = (b[i-1]*13 + a[i])/14 

所以,我的問題是如何爲循環和更快的做同樣的事情沒有?我如何使用numpy矢量化來執行該操作?提前致謝!

+0

看起來每個循環都依賴於之前的循環,如果您知道其中一個稍後的值,那麼您可以在此處對其進行並行化,但實際上這更像是一個編程問題的組合問題。 –

+0

[此問題]的可能重複(http://stackoverflow.com/questions/4407984/is-a-for-loop-necessary-if-elements-of-the-a-numpy-vector-are-dependant-upon -t) – jotasi

+1

如果你必須使用for循環,請看看cython。特別是對於這樣一個簡單的例子,Cython是一個不錯的選擇。 – Moritz

回答

-1

前幾天有人問我同樣的問題,在採訪中,所以我來到了我實施java.I使用遞歸數組遍歷

公共類IterateWithoutLoop {

private int[]arr; 
int size; 


public IterateWithoutLoop(int[] arr) {  
    this.arr = arr; 
    this.size = 0; 
} 


public static void main(String[] args) { 
    int[]arr={1,2,3,4,5}; 
    int i=0; 
    IterateWithoutLoop iterator=new IterateWithoutLoop(arr); 
    iterator.iterateOverArray(); 
} 
public void iterateOverArray(){ 
    if(arr.length!=size){ 

     System.out.print(arr[size++]+"\t"); 
     iterateOverArray();   
    } 

} 

}