matlab - 网格网格的内存高效替代品

标签 matlab memory repeat memory-efficient

假设一个简单的例子,我有索引

index_pos = [3,4,5];
index_neg = [1,2];

我想要一个矩阵:

result =

     1     3
     2     3
     1     4
     2     4
     1     5
     2     5

为此,我编写了以下代码:

[X,Y] = meshgrid(index_pos,index_neg);
result = [Y(:) X(:)];

我认为这不是一个非常有效的方法。另外,当我使用大型实例时,这会占用太多内存。我收到以下错误:

Error using repmat
Out of memory. Type "help memory" for your options.

Error in meshgrid (line 58)
        xx = repmat(xrow,size(ycol));

Error in FME_funct (line 36)
[X,Y] = meshgrid(index_pos,index_neg);

是否有任何“聪明”的方法可以使用更少的内存生成这个矩阵?

PS:我注意到我所做的也给出了 here 。我很可能是从那里发现了这个想法。

最佳答案

这完全取决于您的两个变量与计算机内存量(加上您正在使用的数字类型)的关系。 试试这个:

res = zeros(numel(index_neg)*numel(index_pos), 2)

如果这给你带来了内存不足的错误,那么无论生成器的效率如何,你的计算机中都没有足够的内存来存储结果,所以如果出现上述错误,那么你就会陷入困境。如果没有错误,那么您可以编写一个使用较少临时内存的循环算法。

也就是说,默认情况下 MATLAB 表示 double 字,每个数字 8 个字节。如果您的 index_ 变量碰巧仅包含正整数(全部小于 65,536),那么您可以使用 16 位无符号整数。每个数字仅占用 2 个字节,因此占用的空间比 double 少 4 倍。您可以使用以下方法进行测试:

res = zeros(numel(index_neg)*numel(index_pos), 2, 'uint16')

最后,您可以使用 memory 命令了解 MATLAB 可用的内存量。

关于matlab - 网格网格的内存高效替代品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56739564/

相关文章:

c++ - 使用 bumblebee2 获取立体图像

python - 在 Ubuntu12.04 中使用 Python3 的 lxml 内存泄漏

ios - 查看 Xcode 中哪些对象占用最多内存?

c++ - 内存分配与 Linux 中的 RSS

java - 在 Java 中重复执行 SwingWorker

regex - 如何将正则表达式应用于 Matlab 中的元胞数组?

Python动态数组分配,Matlab风格

matlab - 嵌套文本扫描语句

javascript - 检查字符串 Javascript 中的重复字符

CSS:将图像从图像中的指定位置重复到另一个指定位置