首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Matlab中的内存不足TriScatteredInterp

Matlab中的内存不足TriScatteredInterp
EN

Stack Overflow用户
提问于 2014-04-10 22:15:25
回答 1查看 283关注 0票数 1

我在使用TriScatteredInterp时遇到了内存不足的问题。我有大量的数据需要插值,当我请求单点插值时,MATLAB会返回一个错误。

代码语言:javascript
复制
x = rand(600000,1)*4-2;
y = rand(600000,1)*4-2;
z = rand(600000,1)*4-2;
T=rand(600000,1)*20-2;
>> F=TriScatteredInterp(x, y, z, T)

 F = 

 TriScatteredInterp

  Properties:
     X: [600000x3 double]
     V: [600000x1 double]
Method: 'linear'


F(.5773,1.6473,1.3403)
Error using TriScatteredInterp/subsref
Out of memory. Type HELP MEMORY for your
options.

我想知道是否有人遇到过类似的问题,或者是否有任何可能性通过拆分数据或其他方式来增强代码。

EN

回答 1

Stack Overflow用户

发布于 2014-04-11 17:47:34

以下是您建议的拆分数据的方法:

代码语言:javascript
复制
%% Original data
x = rand(600000,1)*4-2;
y = rand(600000,1)*4-2;
z = rand(600000,1)*4-2;
T=rand(600000,1)*20-2;

%% No data splitting
F=TriScatteredInterp(x, y, z, T);

tic
F(.5773,1.6473,1.3403)
toc

%% Split into 8 blocks
blockBorders = -2:2:2;
F = cell(8,1);
ii = 1;
for ix = 1:2
    for iy = 1:2
        for iz = 1:2
            inBlock = (x >= blockBorders(ix)) & (x < blockBorders(ix+1)) &...
                (y >= blockBorders(iy)) & (y < blockBorders(iy+1)) &...
                (z >= blockBorders(iz)) & (z < blockBorders(iz+1));
            F{ii} = TriScatteredInterp(x(inBlock), y(inBlock), z(inBlock), T(inBlock));
            ii = ii + 1;
        end
    end
end

tic
p = [.5773,1.6473,1.3403];
ix = find((p(1) >= blockBorders(1:end-1)) & (p(1) < blockBorders(2:end)));
iy = find((p(2) >= blockBorders(1:end-1)) & (p(2) < blockBorders(2:end)));
iz = find((p(3) >= blockBorders(1:end-1)) & (p(3) < blockBorders(2:end)));
ii = ix*4 + iy*2 + iz - 6;
F{ii}(p(1), p(2), p(3));
toc

我的机器不会重现您的内存问题,但显示了运行时差异:第一个方法为0.246633秒,第二个方法为0.141250秒。这表明正在处理的数据量较小,可能会解决您的问题。

如果数据的大小增加,您总是可以进一步拆分数据,但是要小心,您实际上是在xyz空间的较小部分上进行插值,这可能会出现问题,这取决于数据的性质。事实上,这里给出的实现也是有问题的,因为插值块之间没有重叠,所以块边界附近的点可能插值得很差。然而,这是一个开始,也是避免内存和运行时问题的一种可能方法。

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

https://stackoverflow.com/questions/22990650

复制
相关文章

相似问题

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