将数字存储在python中的多维稀疏数组中的最佳方法

问题描述

当问题是对称的,因此只需要计算一些数字时,在N维中进行计算的最佳容器对象是什么?

具体来说,对于N = 4,我有:

M=50
results = np.zeros((M,M,M))

for ii in range(M):
   for jj in range(ii,M):
       for kk in range(jj,M):
          for ll in range(kk,M):
              res=1 #really some calculation
              results[ii,jj,kk,ll] = res

此数组中的许多元素都是完全冗余的,甚至没有被访问。对于更高的N来说更是如此(我想提高到N = 10或理想的是N = 15)。

在这样的问题,字典或稀疏矩阵的每一步中使用列表并追加更好吗?我尝试了一个稀疏矩阵,但是它一直警告我不要经常更改稀疏矩阵中的元素,因此大概这不是一个好主意。

我唯一需要保留的功能就是找到最大值(理想情况下沿每个维度)。

任何见解将不胜感激!

解决方法

矩阵的“密度”将乘以1 / D**2,其中D是维数-因此您可以看到空间的收益是指数的,而与列表或稠密矩阵是恒定的。

因此,当维数很大时,稀疏矩阵将在使用的空间上提供巨大的优势,并且它们仍然比列表更快。如果维数较小,则密集矩阵将稍大,但也将稍快(此处略微:快几倍,但由于总执行时间很小,所以绝对差仍然很小)。

总体而言,除非维数固定,否则保留稀疏矩阵会更有意义。但是,如果D是固定的,则最好仅对此特定情况进行基准测试。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...