比如[a,b,c,d,a],希望得到 [a,(a+b)/2,b,(b+c)/2,c,(c+d)/2,d,(d+a)/2,a] 不知道有没有现成的库?
1
Ziya 2019-08-08 16:10:16 +08:00
|
3
junkun 2019-08-08 16:20:31 +08:00
numpy.interp?
|
4
hjq98765 2019-08-08 16:30:05 +08:00
3 楼正解?
我给个笨办法: import itertools as it a = range(9) print a b = list(it.chain.from_iterable([[x,x] for x in a])) print [(x+y)/2.0 for x,y in zip(b[:-1],b[1:])] |
5
smr1113 2019-08-08 17:23:44 +08:00
python:[x[0]] + [(i+j)/2.0 for i,j in zip(x,x[1:])]
函数式: x.head :: (x zip x.tail map {case (x,y) => (x+y)/2.0}) |
6
smr1113 2019-08-08 17:34:25 +08:00
看错了~~
python: from itertools import chain list(chain(*zip(x, [(i+j)/2.0 for i,j in zip(x,x[1:])]))) + [x[-1]] |
7
zkqiang 2019-08-08 18:17:36 +08:00
这种规则的不应该插值,建议像楼上那样生成新的 list
|
8
necomancer 2019-08-09 04:20:36 +08:00
numpy 版的:
b = np.interp(np.linspace(0,1,2*a.shape[0]-1,endpoint=1),np.linspace(0,1,a.shape[0],endpoint=1),a) |
9
necomancer 2019-08-09 04:54:18 +08:00
或者算符版的
b = np.vstack([a, np.convolve([.5,.5,0],a,'same')]).ravel('F')[:-1] 卷积里一个数组长度为常数所以应该还是 O(n) 的复杂度,不过 a 的长度必须大于等于 3,这样少生成两次用来插值的数组 |
10
altboy 2019-08-09 11:18:52 +08:00
这浏览器提醒的多明显
![不理智啊]( ) |