Python - 通过左值快速插值

时间:2013-12-12 09:59:06

标签: python performance numpy

这是一项任务。 我有一些观点: (全部为numpy数组)

xp = [1001, 1010, 1020, 1025]
yp = [0, 0, 1, 1] # two values, if this helps

我想插入这个numpy数组[1000,1001,... 1049,1050]。 因此,每个值等于间隔的左侧:

1000 - (some, doesn't matter)
1001 - 0
1002 - 0 (because left - in 1001 is 0)
1003 - 0 
....
1009 - 0
1010 - 0
1011 - 0
...
1019 - 0
1020 - 1
1021 - 1
...
1024 - 1
1025 - 1
1026 - 1
...
1049 - 1
1050 - 1.

我不想在纯Python中这样做,因为这很慢。 我可以使用numpy和scipy。我可以在没有Cython或С++的情况下快速解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

您应该明确指定端点:

>>> x = np.array(xp+[1051])

得到长度:

>>> np.diff(x)
array([ 9, 10,  5, 26])

并重复:

>>> np.repeat(yp, np.diff(x))
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1])

或者获得二维数组:

>>> np.vstack([np.arange(x[0], x[-1]), np.repeat(yp, np.diff(x))]).T
array([[1001,    0],
       [1002,    0],
       [1003,    0],
         ...
       [1020,    1],
         ...
       [1050,    1]])