2016-11-11 104 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();   
    } 

} 

}