如何使用 SciPy 插值 3D 数据时提高性能

2024-02-19

我有代表大气的 3D 数据。现在我想将此数据插值到一个公共 Z 坐标(我的意思应该从函数的文档中清楚地看出)。下面的代码工作正常,但我想知道是否有办法提高性能......

def interpLevel(grid,value,data,interp='linear'):
    """
    Interpolate 3d data to a common z coordinate.

    Can be used to calculate the wind/pv/whatsoever values for a common
    potential temperature / pressure level.

    grid : numpy.ndarray
       The grid. For example the potential temperature values for the whole 3d
       grid.

    value : float
       The common value in the grid, to which the data shall be interpolated.
       For example, 350.0

    data : numpy.ndarray
       The data which shall be interpolated. For example, the PV values for
       the whole 3d grid.

    kind : str
       This indicates which kind of interpolation will be done. It is directly
       passed on to scipy.interpolate.interp1d().

    returs : numpy.ndarray
       A 2d array containing the *data* values at *value*.

    """
    ret = np.zeros_like(data[0,:,:])
    # we need to copy the grid to a new one, because otherwise the flipping
    # done below will be messed up
    gr = np.zeros_like(grid)
    da = np.zeros_like(data)
    for latIdx in xrange(grid.shape[1]):
        for lonIdx in xrange(grid.shape[2]):
            # check if we need to flip the column
            if grid[0,latIdx,lonIdx] > grid[-1,latIdx,lonIdx]:
                gr[:,latIdx,lonIdx] = grid[::-1,latIdx,lonIdx]
                da[:,latIdx,lonIdx] = data[::-1,latIdx,lonIdx]
            else:
                gr[:,latIdx,lonIdx] = grid[:,latIdx,lonIdx]
                da[:,latIdx,lonIdx] = data[:,latIdx,lonIdx]
            f = interpolate.interp1d(gr[:,latIdx,lonIdx], \
                    da[:,latIdx,lonIdx], \
                    kind=interp)
            ret[latIdx,lonIdx] = f(value)
    return ret

好吧,这可能会带来一点点加速,因为它使用的内存更少。

ret = np.zeros_like(data[0,:,:])
for latIdx in xrange(grid.shape[1]):
    for lonIdx in xrange(grid.shape[2]):
        # check if we need to flip the column
        if grid[0,latIdx,lonIdx] > grid[-1,latIdx,lonIdx]:
            ind = -1
        else:
            ind = 1
        f = interpolate.interp1d(grid[::ind,latIdx,lonIdx], \
                data[::ind,latIdx,lonIdx], \
                kind=interp)
        ret[latIdx,lonIdx] = f(value)
return ret

我所做的就是真正摆脱gr和da。

除此之外,您是否使用大量不同的值调用此函数(即值不同但其他参数相同)?如果是这样,您可能希望使该函数能够处理多个值(向 ret 添加另一个维度,换句话说,该维度与值的长度一样长)。然后您就可以更好地利用您创建的插值函数。

最后的建议是尝试一下分析器 http://docs.python.org/library/profile.html。它可以让您看到什么花费了最多的时间。

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

如何使用 SciPy 插值 3D 数据时提高性能 的相关文章

随机推荐

  • 将 HTML 表格粘贴到 Excel 中,如何在单元格中保留换行符

    我有一个简单的html表格 例如 只有一个单元格 但是当我复制dom节点并将其粘贴到excel中时 它将被识别为两行 如何使Excel获取正确的粘贴数据 table tr td 1 br 2 td tr tr tr table 我尝试添加c
  • Angular2 ngFor 跳过第一个索引[重复]

    这个问题在这里已经有答案了 如何跳过数组中的第一个索引 li user name is user age years old li 你可以使用片管 https angular io docs ts latest api common ind
  • 从 TableView 中的可编辑列动态填充 ChoiceBox

    基本上问题标题说明了一切 我有一列字符串 称为type 在表格视图和相应的数字列 称为size 每行代表一个对象CargoItem 它有两个属性type and size 两列都是可编辑的 TableView 与相应的可观察列表相关联Car
  • CFNetwork SSLHandshake 失败 iOS 9

    有使用 iOS 9 beta 1 的人遇到过这个问题吗 我使用标准 NSURLConnection 连接到 Web 服务 一旦调用 Web 服务 我就会收到以下错误 目前该功能适用 于 iOS 8 3 可能的测试版错误吗 任何想法或想法都会
  • 如何在 SonataAdmin 中创建自定义 DataGrid 过滤器

    我有一个带有许多状态代码的实体交易 我希望用户能够在 SonataAdmin 中将这些状态代码视为字符串 用户还应该能够根据这些状态代码进行过滤 Entity Transaction const TRANSACTION STATUS WAI
  • 有什么方法可以在 Phoenix 中定义自定义路线吗?

    假设我想创建一个resources通过添加一些自定义操作 rails 中的类似物是 resources tasks do member do get implement end end 这不仅会返回 7 条标准路线 还会返回 1 条新路线
  • 为什么我的本地通知在 iOS 10 中没有在前台触发?

    我试图理解为什么本地通知没有显示在前台 我相信我添加了所有正确的代码来允许此功能 但当我的应用程序位于前台时没有显示横幅 这是我添加的内容AppDelegate swift import UserNotifications UIApplic
  • 适用于 Android 的类似 iPhone 的导航点

    我必须创建一个像 iPhone 画廊一样带有导航点的图片库 查看屏幕截图 我需要这样一个小部件 看一下白点 Android 中是否有包含导航点的小部件 如果没有 我怎样才能重现这种效果 经过漫长的日子我发现从 Github 源查看寻呼机导航
  • 如何仅使用标准库将 UTC 日期时间转换为本地日期时间?

    我有一条蟒蛇datetime使用创建的实例datetime utcnow 并保存在数据库中 为了显示 我想转换datetime从数据库检索实例到本地datetime使用默认的本地时区 即 就好像datetime是使用创建的datetime
  • 在 SQL Server 数据库中自动添加对象及其关系

    假设我想插入一个新的Experiment在我的 SQL Server 数据库中 使用实体框架 4 0 Experiment有 1 Tasks in it Both Experiment and Task从获得EntityObject 此外
  • Javascript 数据表中的自动换行列数据

    我有一个 JS 数据表 我们在其中输入客户信息 在某些情况下 一些客户参考是这样的 reference text 26reference 5Ftext 3D 2526reference 255Ftext 253Dtest 252520ips
  • AudioKit v4.2 上的 AKRhodesPiano 错误(粉碎)

    我在用着AudioKit 版本 4 2 https github com AudioKit AudioKit releases tag v4 2在我的手机 iPhone X 上安装我的应用程序后 我收到此错误 参见附图 使用 AKRhode
  • 如何获取 SQL 中具有 MAX 和 MIN 值的行的 ID

    我正在努力使我的网站使用的查询更加高效 由于对 SQL 有点模糊 我还没有真正学会如何使用嵌套查询 但我刚刚设法得到了一些非常接近我想要的东西 我销售吉他 我有一个大数据库 其中单独列出了具有不同饰面选项的所有产品 项目在 dB 中具有唯一
  • oracle多用户功能

    如何创建可供不同用户使用的功能 它必须像内置的 oracle 函数一样工作 可以从任何用户调用 我想这可以通过授予一些特权来实现 这应该为特定用户执行此操作 GRANT EXECUTE ON your function TO some us
  • 如何将包含冒号的 GET 请求发送到 ASP.NET MVC2 控制器?

    这工作正常 GET mvc Movies TitleIncludes Lara 20Croft 当我提交包含冒号的请求时 如下所示 GET mvc Movies TitleIncludes Lara 20Croft 20Tomb 它会生成
  • 如何在Android Studio中更改项目名称

    将 eclipse 项目导入 Android Studio 并将其保存在新文件夹中 将包名称和所有内容更改为新名称 但项目名称仍然是旧项目中的名称 如何将指向的名称更改为其他名称 尝试更改此文件的内容 C Path To Project i
  • EnterCriticalSection 死锁

    多线程日志记录应用程序出现死锁情况 小背景 我的主应用程序有 4 6 个线程正在运行 主线程负责监视我正在做的各种事情的运行状况 更新 GUI 等 然后我有一个传输线程和一个接收线程 发送和接收线程与物理硬件通信 我有时需要调试发送和接收线
  • 如何使用向量通过指针引用递归结构

    我有结构 我们称它们为 sn 看起来像 struct sn string name vector
  • 无法确定包装器版本

    我创建了一个反应本机应用程序 只需执行以下操作 react native init app 我已经按照这个教程进行操作 Facebook 入门 我使用 Linux https facebook github io react native
  • 如何使用 SciPy 插值 3D 数据时提高性能

    我有代表大气的 3D 数据 现在我想将此数据插值到一个公共 Z 坐标 我的意思应该从函数的文档中清楚地看出 下面的代码工作正常 但我想知道是否有办法提高性能 def interpLevel grid value data interp li