首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >numpy数组上的scipy.optimise.bisect

numpy数组上的scipy.optimise.bisect
EN

Stack Overflow用户
提问于 2017-02-06 19:15:29
回答 1查看 1.5K关注 0票数 1

我有一个粗大的浮标数组,打印时如下所示:

红圆是原始值,蓝色十字是用numpy.interp进行的线性插值。

我希望使用scipy.optimize.bisect (例如)找到这个numpy数组(红色圆)的零交叉的横坐标。因为这是一个numpy数组(而不是函数),所以我不能直接将它传递给scipy.optimize.bisect。所以我想传递一个函数,将numpy数组内插到二分。下面是我目前使用的代码:

代码语言:javascript
复制
def Inter_F(x,xp,fp):
    return np.interp(x,xp,fp)
Numpyroot = scp.optimize.bisect(Inter_F,0,9,args=(XNumpy,YNumpy)) 

我发现一个似乎是正确的值,Numpyroot = 3.376425289196618。

我想知道:

  • 如果这是在numpy数组上使用scipy.optimize.bisect的正确技术方法呢?特别是当我要对不同的numpy值做10^6次时。
  • 如果执行线性插值不会影响均分的结果,如果是的话,还有更好的选择吗?

下面是两个numpy数组:

代码语言:javascript
复制
XNumpy = array([ 0.   ,  1.125,  2.25 ,  3.375,  4.5  ,  5.625,  6.75 ,  7.875,  9.   ])
YNumpy = array([ -2.70584242e+04,  -2.46925289e+04,  -1.53211676e+04,
        -2.30000000e+01,   1.81312104e+04,   3.41662461e+04,
         4.80466863e+04,   5.75113178e+04,   6.41718009e+04])
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-07 18:40:15

我认为你所做的是正确的。然而,有一个更简洁的方法。

代码语言:javascript
复制
import numpy as np
from scipy.interpolate import interp1d


XNumpy = np.array([0., 1.125, 2.25, 3.375, 4.5, 5.625, 6.75, 7.875, 9.])
YNumpy = np.array([
    -2.70584242e+04, -2.46925289e+04, -1.53211676e+04,
    -2.30000000e+01, 1.81312104e+04, 3.41662461e+04,
    4.80466863e+04,   5.75113178e+04,   6.41718009e+04
]) 

invf = interp1d(YNumpy, XNumpy)
print(invf(0))

结果:

代码语言:javascript
复制
array(3.376425289199028)

在这里,我使用scipy.interpolate.interp1d返回一个函数。另外,我插值了逆函数,这样就可以很容易地计算出横坐标。当然,您也可以对np.interp执行同样的操作,我喜欢scipy.interpolate.interp1d,因为它返回一个函数,因此我可以从任何给定的y值中计算x值。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42075531

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档