我有两个numpy
数组中的数据:
data = [0.1, 0.3, 0.4, 0.6, 0.7]
time = [10,25, 27, 35, 42]
data
对应于等效索引为time
我想基于一个新的time
数组创建另一个数组,如下所示:
newtime = [10, 20, 30, 40, 50]
新的数据数组应如下所示:
[0.1, 0.1, 0.4,0.6, 0.7]
在每个新时间对应于data
的值。例如,在10s
处,值为0.1
,在20
秒处,值未更改,因此两者都应为0.1
问题是从python中的数据数组和时间数组创建“新数据” numpy的最简单方法是什么?我很乐于尝试除numpy之外的其他python库。
答案 0 :(得分:1)
使用搜索排序可能是最快的方法之一
import numpy as np
data = np.array([0.1, 0.3, 0.4, 0.6, 0.7])
time = np.array([10,25, 27, 35, 42])
newtime =np.array([10, 20, 30, 40, 50])
newdata = data[ np.searchsorted(time, newtime, side="right") - 1 ]
print(newdata)
这将打印出来
[ 0.1 0.1 0.4 0.6 0.7]
答案 1 :(得分:0)
对于此任务,您可以使用RedBlackPy,Linux和macosx上的Python 3支持它。 RedBalckPy.Series类支持时间序列的便捷功能,它使密钥始终保持排序。在这种情况下,您不需要创建新的Series,因为插值内置在getitem运算符(Series [key])中。您可以使用插值(在您的情况下)使用任何键访问。请参见以下代码示例:
import redblackpy as rb
# yours data and time
data = [0.1, 0.3, 0.4, 0.6, 0.7]
time = [10,25, 27, 35, 42]
# create Series object with floor interpolation type
series = rb.Series( index=time, values=data, dtype='float64',
interpolate='floor' )
# now you can access at any key using interpolation,
# it does not create new element, it just use neighbours (t_1 < key < t_2)
# in our case we set floor interpolation, so we get value for t_1
print(series[10]) # prints 0.1
print(series[20]) # prints 0.1
print(series[30]) # prints 0.4
print(series[40]) # prints 0.6
print(series[50]) # prints 0.7
# print Series, Series does not insert this keys
print(Series)
最后的打印内容如下:
Series object Untitled
10: 0.1
25: 0.3
27: 0.4
35: 0.6
42: 0.7
有关更多代码示例,请参见TowardsDataScience上的文章。