所以我正在为计算机视觉项目设计一个矩阵,并且相信我的计算错误之一。不幸的是,我不确定哪里错了。
我正在考虑创建一个100,000,000 x 100,000,000的矩阵,每个'cell'包含一个整数(1或0)。如果我的计算是正确的,则需要9.53674316×10 ^ 9 MB。这是正确的吗?!?
我的下一个问题是,如果它是正确的,有没有办法将内存需求降低到更现实的水平,同时仍然保持矩阵大小相同?当然,我真的有可能实际上不需要那么大小的矩阵,但这是绝对更糟糕的情况(如朋友提出的那样)。这个大小对我来说似乎很荒谬,因为我们一次只能覆盖这么小的距离。
Thanks1 安东尼
答案 0 :(得分:4)
理论上,{0,1}的元素每个单元最多消耗1位。这意味着每个字节8个单元格或1192092895兆字节或大约 1 petabyte ,这太多了,除非你是谷歌:)更不用说,即使处理(或保存)这样的矩阵也会花费太多时间(大约一年我会说。)
你说过在很多情况下你甚至不需要那么大的矩阵。因此,您可以在开始时创建更小的矩阵(10,000 x 10,000),然后在每次需要放大时将尺寸加倍,复制旧内容。
如果你的矩阵是稀疏的(比0更多1或者反之亦然),那么只存储一些有效数据结构的坐标会更有效率,具体取决于什么您需要的操作(搜索,数据访问)。
附注:在许多语言中,你必须小心谨慎,例如在C中,即使你将变量指定为boolean,它仍然需要一个字节,是所需的8倍。
答案 1 :(得分:1)
您的计算是正确的,假设使用单个字节来存储每个布尔值,这是具有dtype=bool
的Numpy数组将执行的操作。
如果您希望矩阵的条目相对较少,那么请考虑使用scipy.sparse
矩阵;只存储那些。