【发布时间】:2019-11-06 10:29:44
【问题描述】:
假设一个简单的例子,我有索引
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。很可能我是从那里找到这个想法的。
【问题讨论】:
-
评论:也许这是线性代数中的特殊向量积..
-
因为
result = [Y(:) X(:)];需要将数据复制到一个新的数组,所以效率不高,占用内存太多?如果将其实现为循环,则可以避免复制,这很简单。 -
哦,
meshgrid出现内存不足错误。这意味着您没有足够的内存来存储X和Y,这意味着您没有足够的内存来存储要构建的矩阵。除了为您的计算机购买更多内存之外,没有其他办法。你必须重新考虑你的算法,这样你就不需要这个非常大的数组了。 -
@CrisLuengo 我认为你是对的。我复制了大小并尝试以该大小启动零矩阵。即使这样也不可能。所以我认为这是由于我的内存:\
-
您是一次性需要整个矩阵,还是使用单行或多组行进行处理,然后继续下一个?
标签: matlab memory repeat memory-efficient