我有几个相同形状的大tables.carray
个数据结构(300000x300000)。我想添加所有数据并将其存储在主矩阵中。
现在,我创建了一个新的carray并用一个简单的循环填充它:
shape = (300000,300000)
#... open all hdf5 files of the existing matrices and create a new one
matrix = h5f.createCArray( h5f.root, 'carray', atom, shape, filters=filters )
for i in range( shape[0] ):
for j in range( shape[1] ):
for m in single_matrices:
# print 'reading', i,j,shape
value = m[i, j]
# print 'writing'
matrix[i, j] += value
但它很慢(> 12小时)。还有更好的方法吗?
答案 0 :(得分:0)
你真的应该使用Expr()类来评估这个[1]。它使用引擎盖下的numexpr来计算块上并行的所需操作。使用out参数甚至可以在计算时将结果写回磁盘。这可确保完整数组永远不会在内存中。