带多个区间的numpy arange
我有一个numpy数组,它表示一个函数的多个x区间:
In [137]: x_foo
Out[137]:
array([211, 212, 213, 214, 215, 216, 217, 218, 940, 941, 942, 943, 944,
945, 946, 947, 948, 949, 950])
如你所见,x_foo中有两个区间:一个是从211到218,另一个是从940到950。这些都是区间,我想用scipy进行插值。为此,我需要调整间距,比如“211.0 211.1 211.2 ...”,通常可以用以下方法做到:
arange( x_foo[0], x_foo[-1], 0.1 )
但是在多个区间的情况下,这样做就不行了。那么我的问题是:有没有一种numpy风格的方法可以以数组的方式来处理这个问题?还是说我需要写一个函数,遍历整个数组,当差值大于1时进行分割?
谢谢!
2 个回答
1
np.r_[ 211:218+1, 940:950+1 ]
array([211, 212, 213, 214, 215, 216, 217, 218, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950])
r_[]
可以把一些简单的东西,比如数字、范围、数组、列表、元组等,组合成一行;我猜 r_
是 "row"(行)的缩写。想了解更多,可以在 Ipython 中输入 np.r_?
查看文档。
(在 Python 中,方括号可以处理 211:218 这样的范围,但圆括号不行,所以用 r_[]
而不是 ()
)。
3
import numpy as np
x = np.array([211, 212, 213, 214, 215, 216, 217, 218, 940, 941, 942, 943, 944,
945, 946, 947, 948, 949, 950])
ind = np.where((x[1:] - x[:-1]) > 1)[0]
这段代码会帮你找到在x这个列表中,值等于218的元素的位置。然后你需要的两个范围是:
np.arange(x[0],x[ind],0.1)
和
np.arange(x[ind+1],x[-1],0.1)