Python Scipy 用于 2D 外推样条函数?

2024-02-23

我想为二维矩阵编写一个外推样条函数。我现在拥有的是一维数组的外推样条函数,如下所示。scipy.interpolate.InterpolatedUnivariateSpline() http://docs.scipy.org/doc/scipy-0.16.0/reference/generated/scipy.interpolate.InterpolatedUnivariateSpline.html用来。

import numpy as np 
import scipy as sp 

def extrapolated_spline_1D(x0,y0):
    x0 = np.array(x0)
    y0 = np.array(y0)
    assert x0.shape == y.shape 

    spline = sp.interpolate.InterpolatedUnivariateSpline(x0,y0)
    def f(x, spline=spline):
        return np.select(
            [(x<x0[0]),              (x>x0[-1]),              np.ones_like(x,dtype='bool')], 
            [np.zeros_like(x)+y0[0], np.zeros_like(x)+y0[-1], spline(x)])

    return f

它采用 x0(定义函数的位置)和 y0(相应的值)。当x x0[-1] 时,y = y0[-1]。这里,假设x0按升序排列。

我想要一个类似的外推样条函数来处理二维矩阵np.select() http://docs.scipy.org/doc/numpy-1.10.1/reference/generated/numpy.select.html as in 外推样条_1D。我想scipy.interpolate.RectBivariateSpline() http://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.RectBivariateSpline.html#scipy.interpolate.RectBivariateSpline可能有帮助,但我不知道该怎么做。

作为参考,我当前的版本外推样条_2D is 非常慢。 基本思想是:

(1) 首先,给定一维数组 x0、y0 和二维数组 z2d0 作为输入,使得 nx0外推样条_1D函数y0_spls,每个函数代表y0上定义的一层z2d0;

(2) 其次,对于不在网格上的点(x,y),计算nx0个值,每个值等于y0_spls[i](y);

(3) 第三,拟合 (x0, y0_spls[i](y)) 与外推样条_1D到 x_spl 并返回 x_spl(x) 作为最终结果。

def extrapolated_spline_2D(x0,y0,z2d0): 
    '''    
    x0,y0 : array_like, 1-D arrays of coordinates in strictly monotonic order. 
    z2d0  : array_like, 2-D array of data with shape (x.size,y.size).
    '''    
    nx0 = x0.shape[0]
    ny0 = y0.shape[0]
    assert z2d0.shape == (nx0,ny0)

    # make nx0 splines, each of which stands for a layer of z2d0 on y0 
    y0_spls = [extrapolated_spline_1D(y0,z2d0[i,:]) for i in range(nx0)]

    def f(x, y):     
        '''
        f takes 2 arguments at the same time --> x, y have the same dimention
        Return: a numpy ndarray object with the same shape of x and y
        '''
        x = np.array(x,dtype='f4')
        y = np.array(y,dtype='f4') 
        assert x.shape == y.shape        
        ndim = x.ndim 

        if ndim == 0:    
            '''
            Given a point on the xy-plane. 
            Make ny = 1 splines, each of which stands for a layer of new_xs on x0
            ''' 
            new_xs = np.array([y0_spls[i](y) for i in range(nx0)]) 
            x_spl  = extrapolated_spline_1D(x0,new_xs)
            result = x_spl(x)

        elif ndim == 1:
            '''
            Given a 1-D array of points on the xy-plane. 
            '''
            ny     = len(y)            
            new_xs = np.array([y0_spls[i](y)                 for i in range(nx0)]) # new_xs.shape = (nx0,ny)       
            x_spls = [extrapolated_spline_1D(x0,new_xs[:,i]) for i in range(ny)]
            result = np.array([x_spls[i](x[i])               for i in range(ny)])

        else:
            '''
            Given a multiple dimensional array of points on the xy-plane.  
            '''
            x_flatten = x.flatten()
            y_flatten = y.flatten()     
            ny = len(y_flatten)       
            new_xs = np.array([y0_spls[i](y_flatten)         for i in range(nx0)])         
            x_spls = [extrapolated_spline_1D(x0,new_xs[:,i]) for i in range(ny)]
            result = np.array([x_spls[i](x_flatten[i])       for i in range(ny)]).reshape(y.shape)
        return result      
    return f

我做过类似的工作,称为 GlobalSpline2Dhere https://github.com/pig2015/mathpy/blob/master/polation/globalspline.py,并且它可以在线性、三次或五次样条下完美运行。

基本上都是继承的interp2d https://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.interp2d.html#scipy.interpolate.interp2d,并通过以下方式将其推广到二维外推法:插值单变量样条 https://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.InterpolatedUnivariateSpline.html#scipy.interpolate.InterpolatedUnivariateSpline。它们都是 scipy 内部函数。

其使用方法应参考document https://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.interp2d.html#scipy.interpolate.interp2d以及调用方法 https://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.interp2d.__call__.html#scipy.interpolate.interp2d.__call__interp2d 的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python Scipy 用于 2D 外推样条函数? 的相关文章

  • 在 Pandas 中,如何从基于另一个数据框的数据框中删除行?

    我有 2 个数据框 一个名为 USERS 另一个名为 EXCLUDE 他们都有一个名为 电子邮件 的字段 基本上 我想删除 USERS 中包含 EXCLUDE 中包含电子邮件的每一行 我该怎么做 您可以使用boolean indexing
  • 使用 Python 创建 MIDI

    本质上 我正在尝试从头开始创建 MIDI 并将它们放到网上 我对不同的语言持开放态度 但更喜欢使用Python 两种语言之一 如果这有什么区别的话 并且想知道我应该使用哪个库 提前致谢 看起来这就是您正在寻找的 适用于 Python 的简单
  • NumPy linalg.eig

    我有这个烦人的问题 但我还没有弄清楚 我有一个矩阵 我想找到特征向量 所以我写 val vec np linalg eig mymatrix 然后我得到了 vec 我的问题是 当我小组中的其他人对相同的矩阵 mymatrix 做同样的事情时
  • 从sklearn PCA获取特征值和向量

    如何获取 PCA 应用程序的特征值和特征向量 from sklearn decomposition import PCA clf PCA 0 98 whiten True converse 98 variance X train clf f
  • 使用 NLTK 在 Python 中获取大量名词(或形容词);或 Python Mad Libs

    Like 这个问题 https stackoverflow com questions 7439555 noun adjective etc word lists or dictionaries common words 我有兴趣按词性获取
  • “一旦获取切片就无法更新查询”。最佳实践?

    由于我的项目的性质 我发现自己不断地从查询集中取出切片 如下所示 Thread objects filter board requested board id order by updatedate 10 但这给我带来了实际对我选择的元素进
  • Python tkinter.filedialog Askfolder 干扰 clr

    我主要在 Spyder 中工作 构建需要弹出文件夹或文件浏览窗口的脚本 下面的代码在spyder中完美运行 在 Pycharm 中 askopenfilename工作良好 同时askdirectory什么都不做 卡住了 但是 如果在调试模式
  • Alembic:如何迁移模型中的自定义类型?

    My User模型是 class User UserMixin db Model tablename users noinspection PyShadowingBuiltins uuid Column uuid GUID default
  • 如何使用 Bokeh 动态隐藏字形和图例项

    我正在尝试在散景中实现复选框 其中每个复选框应显示 隐藏与其关联的行 我知道可以通过图例来实现这一点 但我希望这种效果同时在两个图中发生 此外 图例也应该更新 在下面的示例中 出现了复选框 但不执行任何操作 我显然不明白如何更新用作源的数据
  • 如何从 JSON 响应重定向?

    所以我尝试使用 Flask 和 Javascript 上传器 Dropzone 上传文件并在上传完成后重定向 文件上传正常 但在烧瓶中使用传统的重定向 return redirect http somesite com 不执行任何操作 页面
  • Python Pandas:如何对组中的所有项目进行分组并为其分配 id?

    我有 df domain orgid csyunshu com 108299 dshu com 108299 bbbdshu com 108299 cwakwakmrg com 121303 ckonkatsunet com 121303
  • GradientTape 根据损失函数是否被 tf.function 修饰给出不同的梯度

    我发现计算的梯度取决于 tf function 装饰器的相互作用 如下所示 首先 我为二元分类创建一些合成数据 tf random set seed 42 np random seed 42 x tf random normal 2 1 y
  • 为什么我应该使用 WSGI?

    使用 mod python 一段时间了 我读了越来越多关于 WSGI 有多好的文章 但没有真正理解为什么 那么我为什么要切换到它呢 有什么好处 这很难吗 学习曲线值得吗 为了用 Python 开发复杂的 Web 应用程序 您可能会使用更全面
  • 在 Windows 上使用带有对数刻度的 matplotlib 时出现 Unicode 错误

    我正在使用 python 2 6 和 matplotlib 如果我运行 matplotlib 库页面中提供的示例 histogram demo py 它工作正常 我已经大大简化了这个脚本 import numpy as np import
  • 使用 NLP 进行地址分割

    我目前正在开发一个项目 该项目应识别地址的每个部分 例如来自 str Jack London 121 Corvallis ARAD ap 1603 973130 输出应如下所示 street name Jack London no 121
  • Flask 应用程序的测试覆盖率不起作用

    您好 想在终端的 Flask 应用程序中测试 删除路由 我可以看到测试已经过去 它说 test user delete test app LayoutTestCase ok 但是当我打开封面时 它仍然是红色的 这意味着没有覆盖它 请有人向我
  • sqlite3从打印数据中删除括号

    我创建了一个脚本 用于查找数据库第一行中的最后一个值 import sqlite3 global SerialNum conn sqlite3 connect MyFirstDB db conn text factory str c con
  • 附加两个具有相同列、不同顺序的数据框

    我有两个熊猫数据框 noclickDF DataFrame 0 123 321 0 1543 432 columns click id location clickDF DataFrame 1 123 421 1 1543 436 colu
  • OSX 上的 locale.getlocale() 问题

    我需要获取系统区域设置来执行许多操作 最终我想使用 gettext 翻译我的应用程序 我打算在 Linux 和 OSX 上分发它 但我在 OSX Snow Leopard 上遇到了问题 python Python 2 5 2 r252 60
  • tkinter:打开一个带有按钮提示的新窗口[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 用户如何按下 tkinter GUI 中的按钮来打开新窗口 我只需要非常简单的解决方案 如果代码也能被解释那就太好了 这

随机推荐

  • 无法重新声明类 sfconfig

    我在 Windows XP 上运行 Symfony 1 2 9 和 PHP 版本 5 2 11 我安装了 APC 版本 3 0 19 我可以运行 PHP 脚本来证明 apc 工作正常 有效 但是 当我尝试在 symfony 操作中使用 AP
  • jQuery 使用 :not 从 div 中选择文本

    我做了一个小提琴 http jsfiddle net hAzJq http jsfiddle net hAzJq 如何选择 div 内的文本而不是 span 内的文本 alert div not span text Use contents
  • 从ansible中注册的变量中检索键的值

    我正在编写各种剧本 用于在 AWS 中配置用户 组 策略等 目前 我正在尝试编写一个任务 从给定的 AWS IAM 账户中删除所有访问密钥 要使用 ansible 中的 iam 模块正确执行此操作 您必须指定要禁用的 AWS 访问密钥 该脚
  • jquery 只捕获第一个按键?

    我有这个代码 j regfname keypress function alert Handler for keypress called 并且只想执行一次 或仅在第一次按键时执行 最理想的方法是什么 您可以使用 jQueryone htt
  • 快速将字符串转换为 CLLocationCooperative2D

    使用 Firebase 作为后端 我有一系列纬度和经度坐标字符串 如何将它们转换为 CLLocationCooperative2D 以便我可以将它们用于注释 这是每次更新时从 Firebase 获取信息的代码 var UpdateRef F
  • Cucumber + Capybara + Selenium:选择文本

    我正在对文本编辑器进行更改 并且需要能够选择文本以使用 JavaScript 对其进行操作 如何使用 Cucumber Capybara 和 Selenium 选择文本 我发现了另一个 stackoverflow 问题 讨论如何使用 Jav
  • 如何将自定义 python 与现有包一起使用 - nix 派生?

    我定义了一个带有未合并补丁的自定义 nix cpython 派生 如果我将其指定为目标 nix shell 就会得到我期望的版本 pkgs import
  • 从 R 控制台窗口相当于 wget

    你好 我想知道 Windows 中 wget 的等价物是什么 我目前在 R 中有一个函数 其中包含命令 system wget www random url com file 从运行 R 的 mac unix 机器上从互联网下载文件 Win
  • VSCode:用于修改用户设置的键盘快捷键

    我喜欢 CodeLens 的想法 它是 VSCode 的插件 可以告诉您所有函数和变量的引用计数 然而 当我扫描代码时 为包含 X 引用 行而添加的额外垂直边距让我很恼火 以至于我将其禁用 这很遗憾 因为这是有用的信息 我希望能够通过键盘快
  • 如何让 docker run 继承 ulimits

    通过 docker 运行命令似乎不符合我当前的配置ulimits ulimit t 5 sudo bash c ulimit t 5 sudo docker run rm debian wheezy bash c ulimit t unli
  • 以编程方式禁用在 Intranet 中运行并呈现 .xhtml 页面的站点的 IE-8 兼容模式

    我有一个 JSF 应用程序 其 xhtml 页面在 Intranet 中运行 我尝试删除默认元标记并添加元标记 但没有用 这个解决方案是否仅适用于纯 html 页面 或者是否有任何其他方法可以使用它以编程方式禁用兼容模式 如果您想阻止所有
  • 如何获取Docker桌面虚拟机的IP地址?

    我在一个团队中 我们中的一些人使用 docker 工具箱 一些用户使用 docker 桌面 我们正在编写一个需要与开发中的 docker 容器进行通信的应用程序 在 docker 工具箱上 我知道 docker machine env 命令
  • 上传 Base64 图像 Facebook Graph API

    我正在尝试使用 Node js 将 Base64 图像上传到 FaceBook 页面 如果我从文件系统读取文件 即使用 fs readFileSync c a jpg 我已经设法使上传能够处理所有多部分数据等 但是 如果我使用 base64
  • 为什么 ("foo" === new String("foo")) 在 JavaScript 中计算结果为 false?

    我本来打算在比较字符串值时一直使用 三重等于 严格比较 但现在我发现 foo new String foo 是错误的 与此相同 var f foo g new String foo f g false 当然 f g true 那么是否建议始
  • 如何在一个单元格中包含 python 代码和 markdown

    jupyter笔记本可以支持markdown单元格或verse Visa中的内联python代码 关节炎计算 或绘制图形 在一个单元格中同时包含 Python 代码和 Markdown from IPython display import
  • angularjs / 渲染内联或使用 ng-include 之间的性能差异

    我可以使用 ng include 将部分包含在角度视图中 或者我可以使用服务器端部分在服务器上执行此操作 我正在考虑使用服务器端部分而不是角度部分 然后使用 ng include 使用脚本标记 因为我在某处读到角度部分创建新范围 这可能会损
  • 从 C 源代码调用汇编例程

    我有这个简单的 C 源代码 include
  • 将包含多个工作表的 xlsx 文件转换为多个 xlsx 文件

    我有一个包含多个工作表的 xlsx 文件 我想将所有工作表拆分为不同的 xlsx 文件 例如 我有一个文件 matt xlsx 它有 5 张纸 名称分别为 A B C D E 我想将它们分成 5 个文件 命名为 a xlsx b xlsx
  • 请推荐一个好的 OpenStreetMap 组件 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Python Scipy 用于 2D 外推样条函数?

    我想为二维矩阵编写一个外推样条函数 我现在拥有的是一维数组的外推样条函数 如下所示 scipy interpolate InterpolatedUnivariateSpline http docs scipy org doc scipy 0