如何快速将720亿个元素从numpy数组读入三角矩阵

2024-09-29 06:27:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我有几个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个元素。这将真正减少计算时间


Tags: 方法innumpy元素chainfornp时间
1条回答
网友
1楼 · 发布于 2024-09-29 06:27:47

How to quickly reading 72 billion elements from numpy arrays into triangular matrix

你不能那样做

720亿大约是10亿。假设一个元素是64位字或8字节。这意味着1012字节(在十倍以内)

典型DDR4模块的延迟约为每64位字50纳秒

算算。1012*50纳秒是一段很长的时间。50秒,大约半天

10个12个字节的RAM成本非常高。你能使用超级计算机吗

考虑使用一些昂贵的GPGPU,用OpenCLCuda。如果运气好,加上大量的编程工作,你可能会赢10倍

也许你的计算时间可以减少到一小时

我不知道这在你们的文化中是不是“快”。在我看来,不是

您可能需要数周的开发时间

相关问题 更多 >