我有一个数字的numpy数组,我想互相添加。
例如,如果数组是:
my_list =np.array([2,3,4,5,6]).
我想添加3到2(索引1到0)和4到3(索引2到1),依此类推。
任何有关这方面的帮助或想法都会很棒,因为我对python和编码很新,而且相当困难。
答案 0 :(得分:1)
一种方法是使用itertools
recipe pairwise:
from itertools import tee
def pairwise(iterable):
"s -> (s0,s1), (s1,s2), (s2, s3), ..."
a, b = tee(iterable)
next(b, None)
return zip(a, b)
nums = [2, 3, 4, 5, 6]
sums = [a + b for a, b in pairwise(nums)]
print(sums)
# [5, 7, 9, 11]
另一种方法是使用内置的zip
:
sums = [a + b for a, b in zip(nums, nums[1:])]
最后,根据@StefanPochmann的评论中的要求,如果您使用的是numpy
:
import numpy as np
nums = np.array([2, 3, 4, 5, 6])
sums = nums[:-1] + nums[1:]
至于速度,numpy
解决方案基本上是无与伦比的,只要您的输入数组已经是numpy.array
。如果没有,那么将其转换为数组,zip
和pairwise
一样快。使用Python 3.6.3进行测试。
测试输入:
import random
x = [random.sample(range(1000), n) for n in range(1, 1000, 50)]
最后,numpy
也有O(n)
行为(请注意,数组的长度比之前多100个),其常数正好低一些:
答案 1 :(得分:0)
这是一个解决方案:
nums = [2,3,4,5,6]
sums = []
for i in range(0, len(nums)):
if(i!=0):
sums.append(nums[i] + nums[i-1])
print(sums)
输出:
[5, 7, 9, 11]