Python scipy interp2d因无法分配内存而崩溃,有其他选择吗?

Python scipy interp2d因无法分配内存而崩溃,有其他选择吗?,python,numpy,scipy,Python,Numpy,Scipy,我试图在用户定义的,连续的,二维x,y位置,插值一个二维函数的值,在一个常规的笛卡尔网格(I,j)上定义 我尝试的是使用scipy.interpolate中的函数interp2d,通过使用适当的模型进行插值,得到一个函数,该函数将在(x,y)处返回一个f值 见文件: 下面的代码复制了我遇到的一个错误。interp2d崩溃似乎是因为它无法分配那么多内存 你知道怎么做吗 import scipy.interpolate as interp import numpy as np

我试图在用户定义的,连续的,二维x,y位置,插值一个二维函数的值,在一个常规的笛卡尔网格(I,j)上定义

我尝试的是使用scipy.interpolate中的函数interp2d,通过使用适当的模型进行插值,得到一个函数,该函数将在(x,y)处返回一个f值

见文件:

下面的代码复制了我遇到的一个错误。interp2d崩溃似乎是因为它无法分配那么多内存

你知道怎么做吗

   import scipy.interpolate as interp
   import numpy as np


   def main():
       x = np.arange(4098)/4097.
       z = np.arange(1602)/1601.

       xx,zz = np.meshgrid(x,z)
       f = np.sin(xx**2 + zz**2)

       ff = interp.interp2d(x,z,f, kind='linear')


   if __name__ == '__main__':
       main()

你真的需要这么精细的网格吗?您可以通过降低网格的粒度来节省内存

这使得
x
的范围从0到1,其中有100个等距点:

   x = np.linspace(0, 1, 100)


你真的需要这么精细的网格吗?您可以通过降低网格的粒度来节省内存

这使得
x
的范围从0到1,其中有100个等距点:

   x = np.linspace(0, 1, 100)


问题在于,样条曲线拟合例程对节点选择所需的空间进行了极其悲观的估计(此算法:,请参见lwrk2的说明,并以悲观的方式进行计算——它给出了约200 GB)

请注意,这是一个非结构化数据插值例程——interp2d也可以传递不在常规网格上的输入数据。4098*1602=6564996是用于分散数据插值的相当多的数据点,即使在这种情况下,如果数据规则地排列在网格上,则很容易管理


这在Scipy 0.12.0中是如何工作的,在这种情况下,interp2d推断数据位于矩形网格上,并在这种特殊情况下使用更有效的算法。

问题是样条曲线拟合例程对节点选择中需要多少空间做出了极其悲观的估计(此算法:,请参见lwrk2的描述,并以悲观的方式进行计算——它给出了约200 GB的容量)

请注意,这是一个非结构化数据插值例程——interp2d也可以传递不在规则网格上的输入数据。4098*1602=6564996是用于分散数据插值的大量数据点,即使数据在网格上规则排列(如本例中)很容易管理


这在Scipy 0.12.0中是如何工作的,在这种情况下interp2d推断数据在矩形网格上,并在这种特殊情况下使用更有效的算法。

是的,我从模拟中获得网格,确实需要这种分辨率。是的,我从模拟中获得网格,并且确实需要这种分辨率。你知道错误吗或者使用上面显示的代码,使用那些大小的数组?您有多少内存?
f
xx
zz
每个都在54兆字节以下。
interp2d
应该没有问题。我对上面发布的代码有错误,这些大小是。我得到这个错误:1.0 1.0(16024098)(16024098)(16024098)Python(25673)malloc:**mmap(size=18446744062377512960)失败(错误代码=12)***错误:无法分配区域有严重错误,我认为它不是interp2d。您使用的是什么操作系统?32位还是64位?如何安装numpy和scipy?mac OS 10.6.8 64位numpy(1.6.2)和scipy(0.11.0)与macports(2.1.2)一起安装。还有几个问题:macports中的python也是吗?从scipy import interpolate;interpolate.test()运行
python-c“的输出是什么?”
在终端中?您是否得到了与上面显示的代码完全一致的错误,这些大小的数组?您有多少内存?
f
xx
zz
都在54兆字节以下。
interp2d
应该没有问题。我有上面公布的代码错误,这些大小是。我得到了t他的错误:1.0 1.0(1602,4098)(1602,4098)(1602,4098)Python(25673)malloc:**mmap(size=18446744062377512960)失败(错误代码=12)***错误:无法分配区域有些东西严重错误,我认为它不是interp2d。你使用的是什么操作系统?32位还是64位?你是如何安装numpy和scipy的?mac OS 10.6.8 64位numpy(1.6.2)和安装了macports(2.1.2)的scipy(0.11.0)。还有几个问题:macports的python也是吗?在终端中运行scipy import interpolate;interpolate.test()“”的
python-c”的输出是什么?