首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scipy Radial Basis Function (scipy.interpolate.rbf)中的Python MemoryError

Scipy Radial Basis Function (scipy.interpolate.rbf)中的Python MemoryError
EN

Stack Overflow用户
提问于 2012-08-08 21:15:57
回答 1查看 3.3K关注 0票数 7

我正在尝试使用径向基函数(Rbf)插值一个表示2D曲面的不太大(约10.000个样本)的点云。我得到了一些好的结果,但对于我的最后一个数据集,我总是得到MemoryError,尽管错误几乎是在执行过程中立即出现的(内存显然没有被占用)。

我决定从Scipy中复制一份rbf.py文件,首先用一些打印语句填充它,这些语句非常有用。通过逐行分解_euclidean_norm方法,如下所示:

代码语言:javascript
复制
def _euclidean_norm(self, x1, x2):
    d = x1 - x2
    s = d**2
    su = s.sum(axis=0)
    sq = sqrt(su)
    return sq

我在第一行得到了错误:

代码语言:javascript
复制
File "C:\MyRBF.py", line 68, in _euclidean_norm
    d = x1 - x2
MemoryError

该规范在[ X1,y1,x2,y2,x3,y3,...,xn,yn]和X2形式的数组X1上调用,该数组由Rbf类中的以下方法转置而成,我已经出于调试目的对其进行了修改:

代码语言:javascript
复制
def _call_norm(self, x1, x2):
    print x1.shape
    print x2.shape
    print

    if len(x1.shape) == 1:
        x1 = x1[newaxis, :]
    if len(x2.shape) == 1:
        x2 = x2[newaxis, :]
    x1 = x1[..., :, newaxis]
    x2 = x2[..., newaxis, :]

    print x1.shape
    print x2.shape
    print

    return self._euclidean_norm(x1, x2)

请注意,我打印了输入的形状。对于我当前的数据集,这就是我得到的结果(我手动添加了评论):

代码语言:javascript
复制
(2, 10744)         ## Input array of 10744 x,y pairs
(2, 10744)         ## The same array, which is to be "reshaped/transposed"

(2, 10744, 1)      ## The first "reshaped/transposed" form of the array
(2, 1, 10744)      ## The second "reshaped/transposed" form of the array

根据文档,其基本原理是获得“从x1中的每个点到x2中的每个点的距离矩阵”,这意味着,因为数组是相同的,所以每对条目数组之间的距离矩阵(包含X和Y维)。

我手动使用小得多的数组(例如,形状(2,5,1)和(2,1,5) )和减法进行了测试。

我如何才能找出它不能处理我的数据集的原因?还有其他明显的错误吗?我应该检查我的数据集的某种形式的病态,还是应该对其执行一些预处理?我认为它是有条件的,因为我可以在3D中绘制它,并且云点在视觉上是非常好的。

任何帮助都将不胜感激。

感谢您的阅读。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-09 03:00:51

您的数据集应该没有问题:出现错误是因为您没有足够的RAM来存储减法的结果。

根据广播规则,结果将会有形状

代码语言:javascript
复制
 (2, 10744,     1)
-(2,     1, 10744)
------------------
 (2, 10744, 10744)

假设这些是dtype为float64的数组,您需要2*10744**2*8 =1.72CPU的空闲内存。如果没有足够的空闲内存,numpy将无法分配输出数组,并且会立即失败,并显示您看到的错误。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11865378

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档