2

我有一个 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时拆分?

谢谢!

4

2 回答 2

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)
于 2010-04-29T14:05:44.587 回答
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. 对于文档,请参阅np.r_?Ipython。
(Python 在方括号内处理 211:218 但不是圆形,因此r_[]不是())。

于 2010-05-18T11:47:23.560 回答