获取numpy数组中的元素对的总和

ami*_*des 7 python numpy scipy

我有一个数组:

t = [4, 5, 0, 7, 1, 6, 8, 3, 2, 9]
Run Code Online (Sandbox Code Playgroud)

这只是范围[0,9]的随机混乱.我需要计算一下:

t2 = [9, 5, 7, 8, 7, 14, 11, 5, 11, 13]
Run Code Online (Sandbox Code Playgroud)

这只是:

t2 = [t[0]+t[1], t[1]+t[2], t[2]+t[3], t[3]+t[4], ..., t[9]+t[0]]
Run Code Online (Sandbox Code Playgroud)

有没有办法我可以用numpy来处理大型数组时避免使用python for循环?

unu*_*tbu 19

你可以利用NumPy数组的元素加法能力:

In [5]: import numpy as np

In [6]: t = np.array([4, 5, 0, 7, 1, 6, 8, 3, 2, 9])

In [7]: t + np.r_[t[1:],t[0]]
Out[7]: array([ 9,  5,  7,  8,  7, 14, 11,  5, 11, 13])
Run Code Online (Sandbox Code Playgroud)

np.r_是将序列连接在一起以形成新的numpy数组的一种方法.正如我们将在下面看到的,在这种情况下,事实并非如此.


另一种可能性是:

In [10]: t + np.roll(t,-1)
Out[10]: array([ 9,  5,  7,  8,  7, 14, 11,  5, 11, 13])
Run Code Online (Sandbox Code Playgroud)

看起来使用np.roll速度明显更快:

In [11]: timeit t + np.roll(t,-1)
100000 loops, best of 3: 17.2 us per loop

In [12]: timeit t + np.r_[t[1:],t[0]]
10000 loops, best of 3: 35.5 us per loop
Run Code Online (Sandbox Code Playgroud)