我有几个1D numpy阵列,大小从600000000到150000000个元素不等
我想将所有这些元素写入大小为381K x 381K的numpy数组的上三角
我使用了np.triu_索引。它打破了我的记忆
然后,我创建了一个自定义迭代器来获取三角形矩阵索引,如下所示:
def generate_triangular_mat_gen(n_words):
xgen_iters = chain(*[repeat(x, n_words - 1 - x) for x in range(n_words - 1)])
ygen_iters = chain(*[range(x+1, n_words) for x in range(n_words-1)])
return xgen_iters, ygen_iters
这种方法很有效。但是,一次读取一个元素并复制到numpy数组位置的速度很慢。可能需要一天左右的时间
有没有一种方法可以一次从迭代器中快速获取600000000个元素。这将真正减少计算时间
你不能那样做
720亿大约是10亿。假设一个元素是64位字或8字节。这意味着1012字节(在十倍以内)
典型DDR4模块的延迟约为每64位字50纳秒
算算。1012*50纳秒是一段很长的时间。50秒,大约半天
10个12个字节的RAM成本非常高。你能使用超级计算机吗
考虑使用一些昂贵的GPGPU,用OpenCL或Cuda。如果运气好,加上大量的编程工作,你可能会赢10倍
也许你的计算时间可以减少到一小时
我不知道这在你们的文化中是不是“快”。在我看来,不是
您可能需要数周的开发时间
相关问题 更多 >
编程相关推荐