Got it:
report("Creating dataset")
#rows = fout.create_dataset("rows", (numRows, numCols), dtype=np.float64, chunks=(colchunk, rowchunk))
# create the rows dataset using the low-level api so I can force it to not do zero-filling, then convert to a high level object
spaceid = h5py.h5s.create_simple((numRows, numCols))
plist = h5py.h5p.create(h5py.h5p.DATASET_CREATE)
plist.set_fill_time(h5py.h5d.FILL_TIME_NEVER)
plist.set_chunk((rowchunk, colchunk))
datasetid = h5py.h5d.create(
fout.id, "rows", h5py.h5t.NATIVE_DOUBLE, spaceid, plist)
rows = h5py.Dataset(datasetid)
reportbarrier("Finished creating dataset")
finishes creating the file in about 1 minute 20 seconds.