首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >大型多维数组导致内存泄漏,希望通过h5py dataset解决

大型多维数组导致内存泄漏,希望通过h5py dataset解决
EN

Stack Overflow用户
提问于 2014-11-12 23:15:23
回答 1查看 489关注 0票数 0

下面是我打算做的一个简单的摘录

代码语言:javascript
复制
loop1 = range(10)
loop2 = range(10)
loop3 = range(100)

list = []
for l in loop1:
    for n in loop2:
       for m in loop3:
           list.append([l,n,m])

dSet = []
for l in list:
    matrix = np.ones((600,600))
    matrix = l[2]*matrix
    dSet.append(matrix)

由于将有10,600*600个矩阵,因此dSet不能容纳那么多数据,从而导致每次都会发生内存泄漏。所以我想使用h5py(hdf5)来存储dSet,并为每100个for循环刷新到磁盘,有什么好的解决方案吗?

非常感谢

EN

回答 1

Stack Overflow用户

发布于 2014-11-13 17:22:55

当然你可以做到这一点,但这取决于你想要做什么:

您是希望将10,000个600x600矩阵中的每一个都存储在其自己的数据集中,还是希望拥有一个巨大的矩阵(6000000x600)?

在第一种情况下,使用dset = f.create_dataset("init", data=myData)为每个矩阵创建自己的数据集

在第二种情况下,您必须在创建数据集之后循环并以块的形式写入数据。大致是这样的:

代码语言:javascript
复制
dset = f.create_dataset("MyDataset", (6000000x600,600), 'f')

for idx,l in enumerate(list):
    start = idx*600
    matrix = np.ones((600,600))
    matrix = l[2]*matrix
    dSet[start:start+600] = matrix

只有在事先知道总大小的情况下,这才能起作用。如果没有,您可以使用可扩展的数据集(有关更多详细信息,请参阅here )

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26890272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档