多个间隔的numpy arange

时间:2010-04-29 13:03:46

标签: python numpy scipy interpolation

我有一个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-thonic方式以阵列式方式执行此操作?或者我是否需要编写一个循环整个数组的函数,如果差值> 1?

则拆分

谢谢!

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

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的缩写。 对于doc,请参阅Ipython中的np.r_? (Python在方括号内处理211:218但不是圆形,因此r_[]不是())。