我有一个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?
则拆分谢谢!
答案 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_[]
不是()
)。