def load(file):
     nda = numpy.load(file)
     input_raw_data = nda['input_raw_data']
     clips = nda['clips']
     xs = [reshape_patch(input_raw_data[clips[0,i,0]:clips[0,i,0]+clips[0,i,1]], patch_size) for i in xrange(clips.shape[1])]
     ys = [reshape_patch(input_raw_data[clips[1,i,0]:clips[1,i,0]+clips[1,i,1]], patch_size) for i in xrange(clips.shape[1])]
     return (ndarray(xs), ndarray(ys))
def patchify(data, patch_size):
    # dataset.shape: (n_timesteps, n_feature_maps, height, width)
    n_patches = data.shape[1] * numpy.prod(patch_size)
    # patch_shape: (n_timesteps, n_feature_maps, height, width)
    patch_shape = (data.shape[0], n_patches, data.shape[2]/patch_size[0], data.shape[3]/patch_size[1])
    patches = []
    for j in xrange(patch_size[0]):
        for i in xrange(patch_size[1]):
            patches.append(data[:, :, j*patch_shape[2]:(j+1)*patch_shape[2], i*patch_shape[3]:(i+1)*patch_shape[3]])
    return ndarray(patches).swapaxes(0,1).reshape(patch_shape)