在没有for循环的情况下迭代numpy数组

时间:2016-11-11 16:05:26

标签: arrays python-3.x numpy iteration vectorization

我经常在代码中使用numpy数组。它的速度和方便的索引规则非常有用。现在,我正在寻找如何避免'for'循环以便更快地执行时间。为简单起见,我们假设有两个向量(名为a和b),每个向量有10个元素。第二矢量(b)的第一值等于1,则每第n个值等于'(b [n-1] * 13 + a [n])/ 14'。在'for'循环的帮助下,我可以写下面的内容:

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矢量化来执行该操作?提前谢谢!

1 个答案:

答案 0 :(得分:-2)

几天前我在一次采访中被问到同样的问题,所以我想出了我在java中的实现。我使用递归迭代一个数组

public class 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();         
    }

}

}