Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.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管理大数据结构_Python_Arrays_Data Structures_Sparse Matrix - Fatal编程技术网

用python管理大数据结构

用python管理大数据结构,python,arrays,data-structures,sparse-matrix,Python,Arrays,Data Structures,Sparse Matrix,出于某种原因,我需要在我的python程序中使用一个四维矩阵,它的维数类似于10000x2000x4000x10。当我试图用python中的普通数组实现它时,我发现这是不可能的,因为我的可用系统资源有限。管理此类大数据结构的最佳方式是什么?使用数据库的唯一方法是什么 编辑:因为这取决于我的目标是什么,我将很快描述我正在做什么。我试图将一维背包问题扩展到4维。必须访问两个矩阵和解决方案。当我试图解决路由器的资源分配问题时,这两个矩阵如下所示: keep = [[[[0 for x in xrang

出于某种原因,我需要在我的python程序中使用一个四维矩阵,它的维数类似于10000x2000x4000x10。当我试图用python中的普通数组实现它时,我发现这是不可能的,因为我的可用系统资源有限。管理此类大数据结构的最佳方式是什么?使用数据库的唯一方法是什么

编辑:因为这取决于我的目标是什么,我将很快描述我正在做什么。我试图将一维背包问题扩展到4维。必须访问两个矩阵和解决方案。当我试图解决路由器的资源分配问题时,这两个矩阵如下所示:

keep = [[[[0 for x in xrange(CORE.cap + 1)*1000]for x in xrange(RAM.cap + 1)*1000]for x in xrange(NIC.cap + 1)*1000]for x in xrange(len(JOBS) + 1)]
solution = [[[[0 for x in xrange(CORE.cap + 1)*1000]for x in xrange(RAM.cap + 1)*1000]for x in xrange(NIC.cap + 1)*1000]for x in xrange(len(JOBS) + 1)]

这些矩阵中有很多0,我每次都必须访问矩阵的每一行。

对于1D背包,您只需要在内存中保留矩阵的最后两行。其余部分可以使用运行长度编码存储到磁盘,因为大多数行将包含与前一行相同的值。也许,对于4D背包,您可以在内存中执行类似的操作(例如仅保留一架飞机?),并将其余部分存储到磁盘


或者,您可以对背包使用分支定界算法,或者使用近似算法,在近似算法中创建较小的物品和背包。

对于1D背包,您只需要在内存中保留矩阵的最后两行。其余部分可以使用运行长度编码存储到磁盘,因为大多数行将包含与前一行相同的值。也许,对于4D背包,您可以在内存中执行类似的操作(例如仅保留一架飞机?),并将其余部分存储到磁盘



或者,您可以对背包使用分支定界算法,或者使用近似算法,在该算法中,您可以创建较小的项目和背包。

它是稀疏矩阵(即仅填充一小部分单元格)?如果是这样,就有希望了。否则,它可能太大了。为什么你认为你需要一个如此大的4D阵列?你到底想干什么?有很多惰性/窗口化的大数据算法。我正在将背包算法从一维扩展到4维。这有点复杂,因为我试图用这个算法解决路由器的资源分配问题。对于背包的动态规划方法,我需要2个矩阵保持和求解。虽然这些矩阵中有很多零。如果你愿意,我可以给你执行源代码。如果你把你的算法降下来,你可以放大并使用a,因为这个算法应该能够在商品硬件上运行,我更愿意让它在我的计算机上运行。但是谢谢你的建议,它是一个稀疏矩阵吗(即,只有一小部分单元格被填充)?如果是这样,就有希望了。否则,它可能太大了。为什么你认为你需要一个如此大的4D阵列?你到底想干什么?有很多惰性/窗口化的大数据算法。我正在将背包算法从一维扩展到4维。这有点复杂,因为我试图用这个算法解决路由器的资源分配问题。对于背包的动态规划方法,我需要2个矩阵保持和求解。虽然这些矩阵中有很多零。如果你愿意,我可以给你执行源代码。如果你把你的算法降下来,你可以放大并使用a,因为这个算法应该能够在商品硬件上运行,我更愿意让它在我的计算机上运行。但是谢谢你的建议,我想这可能是我正在寻找的解决办法。但我必须检查这种方法的性能,因为不断地读写文件可能会使算法非常慢。我将实现它并让您知道它是如何运行的。不幸的是,这种方法在第一步失败,因为我尝试构建初始文件并用0填充它们。这需要很长时间,每次运行算法时都必须重复。可能您不需要这样做。您使用DP,因此可以只计算每列的值。当你到达一个不再需要较早值的点时,你只存储该列。但在最后,我需要整个keep矩阵来确定我应该在普通背包中拾取哪些对象,你可以通过从最后一行返回到前一行,一次一行来跟踪最终解。同时最多需要两行内存。在4D背包中,你可能可以做类似的事情。我想这可能是我正在寻找的解决方案。但我必须检查这种方法的性能,因为不断地读写文件可能会使算法非常慢。我将实现它并让您知道它是如何运行的。不幸的是,这种方法在第一步失败,因为我尝试构建初始文件并用0填充它们。这需要很长时间,每次运行算法时都必须重复。可能您不需要这样做。您使用DP,因此可以只计算每列的值。当你到达一个不再需要较早值的点时,你只存储该列。但在最后,我需要整个keep矩阵来确定我应该在普通背包中拾取哪些对象,你可以通过从最后一行返回到前一行,一次一行来跟踪最终解。同时最多需要两行内存。在4D背包中,你可能会做类似的事情。