【问题标题】:How to Create an Evenly spaced Numpy Array from Set Values如何从设置值创建均匀间隔的 Numpy 数组
【发布时间】:2016-05-08 03:24:50
【问题描述】:

我希望通过 numpy 创建一个数组,该数组根据给定数组中的值生成一个间隔到间隔的等距值。

我知道有:

np.linspace(min, max, num_elements)

但我正在寻找的是想象你有一组价值观:

arr = np.array([1, 2, 4, 6, 7, 8, 12, 10])

当我这样做时:

 #some numpy function
arr = np.somefunction(arr, 16)

>>>arr
>>> array([1, 1.12, 2, 2.5, 4, 4.5, etc...)] 
# new array with 16 elements including all the numbers from previous 
# array with generated numbers to 'evenly space them out'

所以我正在寻找与 linspace() 相同的功能,但获取数组中的所有元素并创建另一个包含所需元素但与数组中的设置值间隔均匀的数组。我希望我清楚这一点..

我试图用这个设置实际做的是获取现有的 x,y 数据并扩展数据以在某种意义上拥有更多的“控制点”,这样我就可以从长远来看进行计算。

提前谢谢你。

【问题讨论】:

  • 您能解释一下为什么所需的输出具体具有 1.12、2.5、4.5 等的插值吗?您是否希望在现有数组中的值之间进行插值,同时保留原始值?在您的示例中,您将长度为 8 的数组转换为长度为 16 的数组,但是如果您想将长度为 8 的数组转换为长度为 9 怎么办?在这种情况下如何保留原始值?
  • 这些只是我决定添加的值。因为我不知道如何进行实际计算。它们只是占位符。
  • 好的,但是你的问题可以再详细一点吗?我的其他问题?

标签: python arrays numpy scipy


【解决方案1】:
xp = np.arange(len(arr)) # X coordinates of arr
targets = np.arange(0, len(arr)-0.5, 0.5) # X coordinates desired
np.interp(targets, xp, arr)

上面对 0.5 个间距的 8 个数据点进行了简单的线性插值,总共 15 个点(因为栅栏张贴):

array([  1. ,   1.5,   2. ,   3. ,   4. ,   5. ,   6. ,   6.5,   7. ,
         7.5,   8. ,  10. ,  12. ,  11. ,  10. ])

您可以在numpy.interp 中使用一些其他选项来调整行为。如果需要,您还可以通过不同的方式生成targets

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-07
    • 1970-01-01
    • 1970-01-01
    • 2014-09-17
    相关资源
    最近更新 更多