【问题标题】:Double the length of a python numpy array with interpolated new values将带有插值的新值的 python numpy 数组的长度加倍
【发布时间】:2013-04-29 13:56:09
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • B中不应该有40吗?
  • sum([[x, sum([x,A[n+1]])/2] for n, x in enumerate(A) if n < len(A)-1],[])
  • 如果 A 包含浮点数?
  • @user1640255 我的回答适用于花车。 Hooked 的回答也会

标签: python arrays numpy scipy


【解决方案1】:

使用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.]

【讨论】:

    【解决方案2】:

    使用this answer

    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.])
    

    【讨论】:

    • 我更喜欢这个,更“numpythonic”。虽然我意识到我们的两个答案在最终数组中具有不同的dtype=floatdtype=int(由于仅除以偶数)。
    【解决方案3】:

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

    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]
    

    【讨论】:

    • @user1640255 没问题,我们很乐意提供帮助。确保您投票并选择最佳答案。我从您的个人资料中看到您尚未接受任何答案。去做!它可以帮助我们“结束”一个问题,知道您已经找到了解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-21
    • 1970-01-01
    • 1970-01-01
    • 2016-03-19
    • 2015-08-24
    • 1970-01-01
    • 2019-11-21
    相关资源
    最近更新 更多