【发布时间】:2016-05-11 09:41:40
【问题描述】:
我正在处理大约几千个行和列的二进制(只有 0 和 1)矩阵。例如,行数在 2000 - 7000 之间,列数在 4000 - 15000 之间。我的电脑内存超过 100g。
令我惊讶的是,即使使用这些尺寸,我也收到了 MemoryError 以及以下代码。为了重现性,我提供了一个具有较小矩阵 (10*20) 的示例,请注意,以下两项均会引发此错误:
import numpy as np
my_matrix = np.random.randint(2,size=(10,20))
tr, tc = np.triu_indices(my_matrix.shape[0],1)
ut_sums = np.sum(my_matrix[tr] * my_matrix[tc], 1)
denominator = 100
value = 1 - ut_sums.astype(float)/denominator
np.einsum('i->', value)
我尝试将上面代码中的元素乘法替换为 einsum,如下所示,但它也会生成相同的 MemoryError:
import numpy as np
my_matrix = np.random.randint(2,size=(10,20))
tr, tc = np.triu_indices(my_matrix.shape[0],1)
ut_sums = np.einsum('ij,ij->i', my_matrix[tr], my_matrix[tc])
denominator = 100
value = 1 - ut_sums.astype(float)/denominator
np.einsum('i->', value)
在这两种情况下,打印的 Traceback 都指向正在计算 ut_sums 的行。
请注意,我的代码还有其他操作,还有其他统计数据是在类似大小的矩阵上计算的,但是超过 100 g,我认为应该没有问题。
【问题讨论】:
标签: python numpy matrix out-of-memory