scipy.interpolate.LinearNDInterpolator 在大型数据集上无限期挂起

2024-03-21

我正在 Python 中插入一些数据,以将其重新网格化到常规网格上,以便我可以部分集成它。数据表示高维参数空间的函数(目前为 3,将扩展到至少 5),并返回可观测值的多值函数(目前为 2,将扩展到 3,然后可能扩展到数十个)。

我正在通过执行插值scipy.interpolate.LinearNDInterpolator http://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.LinearNDInterpolator.html由于缺乏任何其他明显的选择(并且因为我明白griddata无论如何,只是调用它)。在较小的数据集(15,000 行列数据)上它工作得很好。在较大的集合(60,000+)上,该命令似乎无限期地运行。top表示 iPython 正在使用 100% CPU 并且终端完全无响应,包括C-c。到目前为止,我已经等了几个小时了,但毫无结果,最终我想传递几百万个条目。

我怀疑这个问题与这张票 http://mail.scipy.org/pipermail/scipy-user/2011-March/028844.html但这据说是在我昨天升级到的 SciPy 0.10.0 中修补的。

我的问题基本上是如何对大型数据集执行多维插值?根据我的尝试,有几个可能的地方可以提供解决方案,但我没有找到它们。 (我的搜索没有得到帮助,因为 scipy 的几个子域似乎很沮丧 http://www.downforeveryoneorjustme.com/www.scipy.org...)

  • 出了什么问题LinearNDInterpolator?或者,至少,我怎样才能找出问题所在并尝试避免挂起?
  • 有没有办法重新制定插值以便LinearNDInterpolator将工作?也许通过谨慎地将数据分块来重新网格化?
  • 是否还有其他更适合该问题的高维插值器? (我注意到大多数 SciPy 的替代方案都仅限于
  • 是否有其他方法可以将多维数据放到常规的用户定义网格上?这就是我试图通过插值来做的所有事情......

问题很可能是您的数据集太大,因此计算其 Delaunay 三角剖分无法在合理的时间内完成。检查时间缩放scipy.spatial.Delaunay使用从完整数据集中随机挑选的较小数据子集来估计完整数据集计算是否在宇宙结束之前完成。

如果你的原始数据在矩形网格上,例如

v[i,j,k,l] = f(x[i], y[j], z[k], u[l])

那么使用基于三角测量的插值是very效率低下。最好使用张量积插值,即通过一维插值方法依次对每个维度进行插值:

import numpy as np
from scipy.interpolate import interp1d

def interp3(x, y, z, v, xi, yi, zi, method='cubic'):
    """Interpolation on 3-D. x, y, xi, yi should be 1-D
    and z.shape == (len(x), len(y), len(z))"""
    q = (x, y, z)
    qi = (xi, yi, zi)
    for j in range(3):
        v = interp1d(q[j], v, axis=j, kind=method)(qi[j])
    return v

def somefunc(x, y, z):
    return x**2 + y**2 - z**2 + x*y*z

# some input data
x = np.linspace(0, 1, 5)
y = np.linspace(0, 2, 6)
z = np.linspace(0, 3, 7)
v = somefunc(x[:,None,None], y[None,:,None], z[None,None,:])

# interpolate
xi = np.linspace(0, 1, 45)
yi = np.linspace(0, 2, 46)
zi = np.linspace(0, 3, 47)
vi = interp3(x, y, z, v, xi, yi, zi)

import matplotlib.pyplot as plt
plt.subplot(121)
plt.pcolor(xi, yi, vi[:,:,12])
plt.title('interpolated')
plt.subplot(122)
plt.pcolor(xi, yi, somefunc(xi[:,None], yi[None,:], zi[12]))
plt.title('exact')
plt.show()

如果您的数据集分散且对于基于三角测量的方法来说太大,那么您需要切换到其他方法。有些选项是同时处理少量最近邻居的插值方法(可以使用 k-d-树快速检索此信息)。反距离称重是其中之一,但它可能是最糟糕的一种——可能有更好的选择(如果没有进一步研究,我不知道)。

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

scipy.interpolate.LinearNDInterpolator 在大型数据集上无限期挂起 的相关文章

  • 如何在Python的SciPy中更改稀疏矩阵中的元素?

    我构建了一个小代码 我想用它来解决涉及大型稀疏矩阵的特征值问题 它工作正常 我现在要做的就是将稀疏矩阵中的一些元素设置为零 即最顶行中的元素 对应于实现边界条件 我可以调整下面的列向量 C0 C1 和 C2 来实现这一点 不过我想知道是否有
  • 使用 data.table 对分组数据进行插值

    这是我最初发布的问题的延续http r 789695 n4 nabble com subset Between data table list and single data table object tp4673202 html http
  • 使用 scipy 的solve_bvp 求解 BVP

    我有一个由 3 个微分方程组成的系统 我相信从代码中可以明显看出 具有 3 个边界条件 我设法在 MATLAB 中用一个循环来解决这个问题 一点一点地改变最初的猜测 而不会在程序即将返回错误时终止程序 然而 关于scipy s solve
  • 将 scipy 稀疏矩阵的几行采样到另一个中

    如何对 scipy 稀疏矩阵的某些行进行采样 并从这些采样的行中形成一个新的 scipy 稀疏矩阵 例如 如果我有一个 10 行的 scipy 稀疏矩阵 A 并且我想创建一个新的 scipy 稀疏矩阵 B 其中 A 的第 1 3 4 行 该
  • 如何使用 scipy.odr 估计拟合优度?

    我使用 scipy odr 将数据与权重拟合 但我不知道如何获得拟合优度或 R 平方的度量 有人对如何使用函数存储的输出来获取此度量有建议吗 The res var的属性Output http docs scipy org doc scip
  • Android 是否可以使用并发插值器?

    我有一组两个动画 两个动画使用过冲插值器一起运行
  • 反转或点 kxnxn 矩阵的快速方法

    有没有一种快速方法可以使用 numpy 计算 kxnxn 矩阵的逆矩阵 在每个 k 切片处计算逆矩阵 换句话说 有没有办法矢量化下面的代码 gt gt gt from numpy linalg import inv gt gt gt a r
  • 如何使用 scipy.integrate 获取截断球体的体积?

    我正在努力使用 scipy integrate 我使用了 tplquad 但是我该如何使用integrate获得 截断 球体的体积 谢谢 import scipy from scipy integrate import quad dblqu
  • scipy cdist 与稀疏矩阵

    我需要计算两组向量之间的距离 source matrix and target matrix 我有以下几行 当两者source matrix and target matrix属于类型scipy sparse csr csr matrix
  • 如何在Python中拟合阶跃函数

    我有一个关于使用 curve fit 等 scipy 例程拟合阶跃函数的问题 我很难将其矢量化 例如 import numpy as np from scipy optimize import curve fit import matplo
  • python 中的优化标准化

    在优化过程中 对输入参数进行归一化 使它们处于同一数量级 通常会很有帮助 这样收敛效果会更好 例如 如果我们想要最小化 f x 而合理的近似值是 x0 1e3 1e 4 则将 x0 0 和 x0 1 归一化到大约相同的数量级可能会有所帮助
  • Pandas 中每列的曲线拟合 + 外推值

    我有一个包含大约 300 列的数据集 每一列都与深度相关 Pandas DataFrame 的简化版本看起来像这样 import matplotlib pyplot as plt import numpy as np import pand
  • 如何将多项式拟合到带有误差线的数据

    我目前正在使用 numpy polyfit x y deg 将多项式拟合到实验数据 然而 我想拟合一个基于点误差使用加权的多项式 我已经发现scipy curve fit http docs scipy org doc scipy refe
  • 如何使用 python 测量骨架长度的想法

    After applying skeletonization http scikit image org docs dev auto examples plot skeleton html on an image 我想使用 python 测
  • 如何保存 numpy 数组图像并将它们放入单个文件夹中?

    我有一个 numpy 数组 其中包含 5000 个 28 x 28 图像 5000 28 28 我想将所有这些图像保存为 jpg 文件并将它们全部保存在一个文件夹中 实现这一目标最快 最有效的方法是什么 我尝试使用以下命令将 50 000
  • 更换色谱柱时出现稀疏效率警告

    def tdm modify feature names tdm non useful words kill stampede trigger cause death hospital minister said told say inju
  • 如何将 python 点列表转换为 numpy 图像数组?

    我有一个 python 点列表 x y 坐标 200 245 344 248 125 34 它表示二维平面上的轮廓 我想使用一些 numpy scipy 算法进行平滑 插值等 它们通常需要 numpy 数组作为输入 例如scipy ndim
  • Panda如何将行分组到不同的时间桶中?

    我有一个带有名为时间戳的日期时间类型列的数据帧 我想根据时间部分的时间戳将数据帧拆分为多个数据帧 每个数据帧包含按其值模 x 分钟进行值的行 其中 x 是变量 请注意e and f不按原来的顺序 以 10 分钟为模 我希望所有时间都以3在一
  • 用给定均值截断正态分布

    python 是否可以生成具有给定期望值的截断正态分布 我知道 scipy stats truncnorm 可以给出截断的正态分布 该分布取平均值original正态分布作为参数 但我想创建一个截断正态分布 使得截断分布的期望值是一个特定值
  • scipy.special.binom 和 scipy.misc.comb 之间有什么区别?

    scipy special binom 和 scipy misc comb 之间有什么区别 在 ipython 中我可以看到它们返回不同的类型并且也有不同的精度 scipy special binom 4 3 4 0 scipy misc

随机推荐