【发布时间】:2021-11-09 00:43:32
【问题描述】:
我有一个行向量q 和200 元素,还有另一个行向量dij,它是pdist 函数的输出,当前有48216200 元素,但我想成为能够走得更高。我要做的操作本质上是:
t=sum(q'*dij,2);
但是,由于它试图分配一个200x48211290 数组,它抱怨这需要 70GB 的内存。因此我这样做:
t = zeros(numel(q),1);
for i=1:numel(q)
qi = q(i);
factor = qi*dij;
t(i)=sum(factor);
end
但是,这需要太多时间。太多时间,我的意思是大约需要36s,这比pdist 函数所需的时间长几个数量级。有没有一种方法可以在不显式分配这么多内存的情况下加快此操作?我在这里假设,如果第一种方式可以分配内存,(作为向量操作)它会更快。
【问题讨论】:
-
@LuisMendo 是的,很好。
-
用
dij100万个元素运行你的代码,矢量化解耗时0.58秒,循环耗时0.13秒。显然循环是更有效的解决方案,因为这种差异只会随着更大的数组而增加。请在假设矢量化代码更快之前为您的代码计时! -
@L.ScottJohnson 不太好用,因为在
gather()步骤中它给出了相同的内存错误。
标签: arrays matlab large-data