Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何快速将720亿个元素从numpy数组读入三角矩阵_Python_Arrays_Numpy - Fatal编程技术网

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

Python 如何快速将720亿个元素从numpy数组读入三角矩阵,python,arrays,numpy,Python,Arrays,Numpy,我有几个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_wo

我有几个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亿个元素从numpy数组读入三角矩阵

你不能那样做 720亿相当于1011亿。假设一个元素是64位字或8字节。这意味着1012个字节(在十倍以内)

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

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

1012字节的内存成本很高。你能使用超级计算机吗

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

也许你的计算时间可以减少到一小时。 我不知道这在你们的文化中是不是“快”。在我看来,不是

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

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

你不能那样做 720亿相当于1011亿。假设一个元素是64位字或8字节。这意味着1012个字节(在十倍以内)

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

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

1012字节的内存成本很高。你能使用超级计算机吗

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

也许你的计算时间可以减少到一小时。 我不知道这在你们的文化中是不是“快”。在我看来,不是


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

计算时间可能不是这里的问题。存储八字节值(例如INT)的381k×381k数组将以原始上三角形式占用约600GB的空间。你有那么大的记忆力吗?您试图存储哪些元素?你能在稀疏矩阵中存储数据吗?这些是字符串距离。我正在尝试对客户名称进行聚类,以便更快地搜索。您有访问超级计算机的权限吗?哪一个?请在您的问题中提供一些,并告诉更多有关您可用的硬件的信息无监督群集可以在随机数据子样本上运行良好。我建议尝试另一种方法来解决这个问题,除非你有一个处理这么多存储/内存的系统。你可能希望考虑使用Hadoop和Spark进行分布式计算。您将在几分钟内将如此多的数据读入内存。这里的问题可能不是计算时间。存储八字节值(例如INT)的381k×381k数组将以原始上三角形式占用约600GB的空间。你有那么大的记忆力吗?您试图存储哪些元素?你能在稀疏矩阵中存储数据吗?这些是字符串距离。我正在尝试对客户名称进行聚类,以便更快地搜索。您有访问超级计算机的权限吗?哪一个?请在您的问题中提供一些,并告诉更多有关您可用的硬件的信息无监督群集可以在随机数据子样本上运行良好。我建议尝试另一种方法来解决这个问题,除非你有一个处理这么多存储/内存的系统。你可能希望考虑使用Hadoop和Spark进行分布式计算。你将在几分钟内把这么多的数据读入内存。巴兹尔,谢谢你的回答。这对我来说澄清了很多事情。我想我可能会更幸运地转向一个更合适的算法。我尝试使用字符串距离创建集群,以便使用Sklearn的聚合集群API更好地搜索相似的名称。一小时很快。这是一项一次性任务。是的,但开发时间可能是几周。OpenCL是一个很难对付的野兽。谢谢你的回答,巴兹尔。这对我来说澄清了很多事情。我想我可能会更幸运地转向一个更合适的算法。我尝试使用字符串距离创建集群,以便使用Sklearn的聚合集群API更好地搜索相似的名称。一小时很快。这是一项一次性任务。是的,但开发时间可能是几周。OpenCL是一个硬骨头。