这是一项任务。 我有一些观点: (全部为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或С++的情况下快速解决这个问题吗?
答案 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]])