Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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 如何在一个非常大的numpy阵列上使用scipy cdist函数而不出现内存错误?_Python_Arrays_Numpy_Memory_Jupyter Notebook - Fatal编程技术网

Python 如何在一个非常大的numpy阵列上使用scipy cdist函数而不出现内存错误?

Python 如何在一个非常大的numpy阵列上使用scipy cdist函数而不出现内存错误?,python,arrays,numpy,memory,jupyter-notebook,Python,Arrays,Numpy,Memory,Jupyter Notebook,我试图用numpy阵列在一个非常大的3D网格中找到每个点的引力势。不幸的是,我的3D网格太大了,以至于我经常遇到内存问题,不知道该怎么做 我的3D网格具有形状(401401401);x、y和z轴分别在-200和+200之间延伸。 在网格中的每个点上,我都有一个质量值。我的目标是计算每个点的引力势。我使用的重力势方程是: 因此,为了找到网格中所有点的引力势,对于网格中的每个点p,我必须首先找到点p和网格中每个其他点之间的成对距离。然后我可以乘以相关的质量,然后对分数求和。我很难找到这么多点的成对

我试图用numpy阵列在一个非常大的3D网格中找到每个点的引力势。不幸的是,我的3D网格太大了,以至于我经常遇到内存问题,不知道该怎么做

我的3D网格具有形状(401401401);x、y和z轴分别在-200和+200之间延伸。 在网格中的每个点上,我都有一个质量值。我的目标是计算每个点的引力势。我使用的重力势方程是:

因此,为了找到网格中所有点的引力势,对于网格中的每个点p,我必须首先找到点p和网格中每个其他点之间的成对距离。然后我可以乘以相关的质量,然后对分数求和。我很难找到这么多点的成对距离

我尝试使用scipy distance.cdist函数来查找大网格中所有点之间的成对距离。它适用于更小的网格:我可以找到相关的距离,乘以质量,然后对每行求和,得到每个点的相关和。但是,distance.cdist函数不能用于如此大的网格;我只是得到内存错误,或者Jupyter笔记本中的内核死亡,因为输出数组太大了。我还尝试将网格划分为更小的子网格,对所有子网格进行计算,然后将它们放在一起。这也不起作用:我必须将大网格划分为许多较小的部分,以至于计算所有这些较小部分所需的时间太长。我还尝试使用for循环。这也不起作用,因为它需要太长时间

有没有什么方法可以让我在不遇到内存问题的情况下找到所有这些成对距离的和


谢谢大家!

存储这样一个数组需要大约17 PB的RAM。你需要找到另一种方法来实现你想做的事情,因为这不可能是你目前的方式。你想通过成对距离实现什么?由于尺寸的原因,一次找到所有的引力势是不可行的。@Ehsan我试图计算(401401401)网格上每个点的引力势(我将其展平以获得位置阵列)。为此,对于网格上的每个点p,我必须找到点p和网格上每个其他点之间所有成对距离的总和。使用scipy cdist,然后对输出数组中的每一行求和,在较小的网格上效果非常好。在更大的网格上有没有其他方法来计算这个总和?@Hillary我认为你应该编辑你的问题并添加这些信息。我认为你可以将你的网格划分成更小的子网格,进行评估并将它们相加。你需要大约17 PB的RAM来存储这样一个数组。你需要找到另一种方法来实现你想做的事情,因为这不可能是你目前的方式。你想通过成对距离实现什么?由于尺寸的原因,一次找到所有的引力势是不可行的。@Ehsan我试图计算(401401401)网格上每个点的引力势(我将其展平以获得位置阵列)。为此,对于网格上的每个点p,我必须找到点p和网格上每个其他点之间所有成对距离的总和。使用scipy cdist,然后对输出数组中的每一行求和,在较小的网格上效果非常好。在更大的网格上有没有其他方法来计算这个总和?@Hillary我认为你应该编辑你的问题并添加这些信息。我认为你可以将网格划分为更小的子网格,然后进行评估并将其相加。