【问题标题】:numpy arange with multiple intervals具有多个间隔的numpy范围
【发布时间】:2011-02-13 19:33:12
【问题描述】:

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

谢谢!

【问题讨论】:

    标签: python numpy scipy interpolation


    【解决方案1】:
    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)
    

    【讨论】:

    • 感谢您的回答,但这并不是我想要的。我认为可能有办法解决这个问题。我现在正在使用平等的方法。还是谢谢!
    • 那我想我不明白你在寻找什么样的答案。您能否详细说明您正在寻找什么样的答案?
    【解决方案2】:
    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_[] 不是 () )。

    【讨论】:

      猜你喜欢
      • 2021-08-29
      • 1970-01-01
      • 2018-07-03
      • 1970-01-01
      • 2019-07-18
      • 2020-09-07
      • 1970-01-01
      • 2017-06-23
      • 2019-10-21
      相关资源
      最近更新 更多