Matrix multiplication using hdf5 Matrix multiplication using hdf5 numpy numpy

Matrix multiplication using hdf5


I don't know of a np.dot that work without loading into memory. I think blocking would work pretty well. Create a an output array (called "c" below) as pytables CArray and fill in blocks. You should choose the chunkshape when you create it to match your blocking scheme. Something like

atom = tables.Float32Atom() # you have UInt8Atom() above.  do you mean that?shape = (a.shape[0], b.shape[1])# you can vary block_size and chunkshape independently, but I would# aim to have block_size an integer multiple of chunkshape# your mileage may vary and depends on the array size and how you'll# access it in the future.Nchunk = 128  # ?chunkshape = (Nchunk, Nchunk)chunk_multiple = 1block_size = chunk_multiple * Nchunkc = h5f.create_carray(h5.root, 'c', atom, shape, chunkshape=chunkshape)for i_start in range(0, a.shape[0], block_size):    for j_start in range(0, b.shape[1], block_size):        for k_start in range(0, a.shape[1], block_size):            c[i_start:i_start+block_size, j_start:j_start + block_size] += \                     np.dot(a[i_start:i_start + block_size, k_start:k_start + block_size],                           b[k_start:k_start + block_size, j_start:j_start + block_size]