9

我有一个由 5 个数字组成的数组:

A = [10, 20, 40, 80, 110]

我需要创建一个长度为第 10 个数字的新数组。

额外的数字可能是两个 # of 之间的平均数A

例如: EDIT B = [10 , 15 , 20 ,30, 40, 60, 80, 95, 110 ]

是否可以使用 scipy 或 numpy 函数?

4

3 回答 3

10

使用numpy.interp

import numpy as np
Y = [10, 20, 40, 80, 110]
N = len(Y)
X = np.arange(0, 2*N, 2)
X_new = np.arange(2*N-1)       # Where you want to interpolate
Y_new = np.interp(X_new, X, Y) 
print(Y_new)

产量

[  10.   15.   20.   30.   40.   60.   80.   95.  110.]

于 2013-05-05T20:55:33.417 回答
5

使用这个答案

In [1]: import numpy as np

In [2]: a = np.array([10, 20, 40, 80, 110])

In [3]: b = a[:-1] + np.diff(a)/2

In [4]: c = np.empty(2 * a.size -1)

In [5]: c[::2] = a

In [6]: c[1::2] = b

In [7]: c
Out[7]: array([  10.,   15.,   20.,   30.,   40.,   60.,   80.,   95.,  110.])
于 2013-05-05T19:23:42.193 回答
2

您并没有将其翻倍,因为您只有两者之间的平均值。40正如@LevLevitsky 在评论中指出的那样,您也失踪了。

import numpy as np
A = np.array([10, 20, 40, 80, 110])
avg = (A[:-1] + A[1:])/2

B = []
for x1, x2 in zip(A, avg):
    B.append(x1)
    B.append(x2)
B.append(A[-1])

B = np.array(B)
print B

给出:

[ 10  15  20  30  40  60  80  95 110]
于 2013-05-05T19:16:58.960 回答