我有一个复杂的矩阵乘法,有几十万行和列。在某个时刻,内存使用量增长到100%,然后计算机就会冻结,我不得不手动重启它。
我尝试过使用Numba(将代码写在带有装饰器的函数中)和Dask(将numpy数组转换为da.from_array(var, chunk)),但都没有成功。我对这些工具都不是专家。
我已经阅读了很多类似问题的解答,但没有找到适合我的问题的好解决方案。
一个最小可复现的示例可能是:
在内存使用方面,什么是解决它的最佳选项?(不一定是最快的)
我尝试过使用Numba(将代码写在带有装饰器的函数中)和Dask(将numpy数组转换为da.from_array(var, chunk)),但都没有成功。我对这些工具都不是专家。
我已经阅读了很多类似问题的解答,但没有找到适合我的问题的好解决方案。
一个最小可复现的示例可能是:
m = 100000
n = 100000
a1 = np.random.rand(m)
a2 = np.random.rand(n)
c = np.random.rand(m)+1j*np.random.rand(m)
b = np.random.rand(n)+1j*np.random.rand(n)
A = np.exp(1j*np.outer(a1,a2))
d = c*np.dot(A,b)
在内存使用方面,什么是解决它的最佳选项?(不一定是最快的)
np.einsum
在内存使用上更高效。 - MSSdot
更高效?你确定吗?但是A`呢?那会生成多个(m,n)缓冲区。 - hpauljm
维度分成批次并对其进行迭代可能会起作用。 - hpauljm
维度分成批次并对其进行迭代可能会起作用。 - hpaulj