gpt4 book ai didi

python - 将大的不规则网格插入 Python 中的另一个不规则网格

转载 作者:行者123 更新时间:2023-11-28 21:28:36 27 4
gpt4 key购买 nike

我正在尝试使用 Python 将复杂值从一个不规则网格插入到另一个不规则网格。网格是二维的,有 103,113 个数据点。我正在使用 Python 2.6.6、Scipy 0.7.2、Numpy 1.3.0、Matplotlib 0.99.3

在使用网格数据的 Matlab 中,这可在大约 5 秒内完成。

BnGRID2  = griddata(R_GRID1,Z_GRID1,BnGRID1,R_GRID2,Z_GRID2) (MATLAB)

(注意所有数组都是 201 x 513)

但是,如果我尝试使用 matplotlib.mlab.griddata,即使我尝试仅使用实部,也会出现 memoryError:

mlab.griddata(R_GRID1.flatten(),Z_GRID1.flatten(),num.real(BnGRID1.flatten()),R_GRID2.flatten(),Z_GRID2.flatten())

如果我尝试使用 interp2d,我会遇到段错误并且 Python 退出:

a = interp.interp2d(R_GRID1,Z_GRID1,num.real(BnGRID1))

我尝试过使用 KDTree,这似乎工作正常,但是,与 Matlab 的几秒钟相比,它需要几分钟,但我还没有过多地探索这个选项。

想知道是否有人知道如何像 Matlab 那样快速完成这项工作?我注意到较新版本的 Scipy 也有网格数据,有谁知道这是否可以处理大型不规则网格?

最佳答案

Scipy 的 griddata 似乎能够毫无问题地处理这种规模的数据集:

import numpy as npimport scipy.interpolate# old gridx, y = np.mgrid[0:1:201j, 0:1:513j]z = np.sin(x*20) * (1j + np.cos(y*3))**2   # some data# new gridx2, y2 = np.mgrid[0.1:0.9:201j, 0.1:0.9:513j]# interpolate onto the new gridz2 = scipy.interpolate.griddata((x.ravel(), y.ravel()), z.ravel(), (x2, y2), method='cubic')

griddata 步骤在旧的 AMD Athlon 上大约需要 5 秒。

如果您的数据位于网格上(即对应于值 z[i,j] 的坐标为 (x[i], y[j])),您可以使用 scipy.interpolate.RectBivariateSpline 获得更快的速度

z3 = (scipy.interpolate.RectBivariateSpline(x[:,0], y[0,:], z.real)(x2[:,0], y2[0,:]) + 1j*scipy.interpolate.RectBivariateSpline(x[:,0], y[0,:], z.imag)(x2[:,0], y2[0,:]))

这需要 0.05 秒。它的速度要快得多,因为即使您的网格间距不规则,只要网格是矩形的,就可以使用更高效的算法。

关于python - 将大的不规则网格插入 Python 中的另一个不规则网格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7701669/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com