我有一个非常大的矩阵,不能简单地放入内存中。我必须使用的矩阵有483798149136元素,这意味着4830亿个浮点数。
我正在考虑的方法是以某种方式将这个巨大的矩阵拆分到不同的子矩阵中,这些子矩阵适合内存,对这些子矩阵执行联营操作,然后将它们连接回原来的矩阵,希望在进行所有池操作之后,该矩阵将被重新放入内存中。
如果我错了,请纠正我,这个方法只是我想出来的一个想法,它到底是好是坏,我不知道。如果你有更好的替代方案,我愿意接受任何建议。
复制此矩阵的代码如下:
a = np.arange(695556).reshape(834,834)
np.meshgrid(a,a)我一直在阅读这和这的文章,在这个网站上的其他文章中,没有一个能真正解决这些问题,他们只是给出了模糊的建议。
我现在的问题是:
编辑
由于有些用户询问我整个操作的目标,我将提供一些信息:
我在做一个3d打印项目。在这个过程中,有一个激光束融化金属粉末,以创造复杂的金属片。在这些碎片中有层,激光一层一层地熔化金属。
我有3个csv文件,每个文件包含一个矩阵834x834。第一矩阵包含激光束穿过粉末床熔化金属时X轴的坐标值,第二矩阵与Y轴相同,第三矩阵表示激光在同一像素点上熔化的时间。这些值以秒表示。
所以我有激光穿过X和Y轴的坐标,以及融化每个点所需的时间。
这个矩阵是从每个制造件的部分的图像中得到的。
问题是,当激光到达时,某个像素的温度和激光停留在该像素上的时间会对n个像素产生影响。所以我想要创建一个距离矩阵,它告诉我在欧几里得距离上,图像的每个像素彼此是多么的不同或相似。
这就是为什么如果我有2834x834矩阵,我需要创建一个矩阵695556 x 695556,矩阵中的每个点之间的距离都是彼此之间的。这就是为什么如此庞大,无法融入记忆的原因。
我不知道我是否提供了太多的信息,或者我的解释是否混乱。你可以问你需要什么,我会试着澄清它,但重点是我需要在ordr中创建这个巨大的距离矩阵,以了解像素之间的数学距离,然后了解在打印它时在某一点上发生的事情与在其他点需要发生什么以避免制造缺陷之间的关系。
先谢谢你
发布于 2019-03-04 10:40:23
毕竟,我想出了解决问题的办法。使用达斯克可以轻松地处理这个巨大的矩阵。Dask是一个python库,它允许分布式计算和数据分割成块,以优化内存的使用。它非常方便,因为它确实允许你以非常低的计算和内存成本处理海量的数据,很明显,内存计算的速度不如内存计算,但是我想很多人会很高兴知道这一点的。
这个包是很好的优化和经常更新。最棒的是,它有numpy/熊猫的新税,它的数据处理方式与数组相同,如果你知道熊猫/熊猫,你会觉得和达斯克在一起就像在家里一样。
您可以创建如下所示的dask分布式数组:
import numpy as np
import dask.array as da
Y = da.random.normal(size=(695556, 695556),
chunks=(1000, 1000))然后,您可以对其执行如下操作:
y = Y.mean(axis=0)[0:100].compute()此外,如果使用memory_profiler 套餐,还可以监视内存和CPU的使用情况,并查看计算所需的大量数据。
有一些实用的例子,我发现非常说明性的这里。
此外,这个库中的解释数组作用域可以找到这里。
最后,介绍Python3.x 这里中的高性能计算指南。
希望这能帮助有同样问题的人。
发布于 2022-03-20 13:09:45
由于矩阵计算是逐行或逐列的,我认为您可以轻松地减少它们。假设200个25x50个矩阵乘以50x100个矩阵,你应该得到200乘以25x100个矩阵,对吗?首先,您可以将200除以n,例如,有时乘以20,然后将生成的numpy数组连接起来。更好的是,您可以使用50xm而不是50x100,而numpy将25x50与50x10相乘,然后再连接(重新组合、重新组合、再整形或使用高级索引)。
下面是值得一提的部分:例如,您有两个10E9x10E9矩阵,并希望将它们相乘。将它们分成20x20个子部分,然后乘以它们,然后再对结果进行整形。假设您有一个内存很少的gpu,我相信您可以在一个进程中将数据流到它的内存中,同时使用多处理使其乘以以前的数据块。我从来没有尝试过,但我将尝试使用GT 1030或6500 XT使用cupy或pyopencl,并将编辑这篇文章,并添加作为一个例子。
也有一种方式,不涉及重新发明所有这些。https://medium.com/analytics-vidhya/matrix-multiplication-at-scale-using-map-reduce-d5dc16710095
https://stackoverflow.com/questions/54946148
复制相似问题