def gff3_to_recarray(path, attributes=None, region=None, score_fill=-1,
                     phase_fill=-1, attributes_fill='.', tabix='tabix', dtype=None):
    recs = list(iter_gff3(path, attributes=attributes, region=region,
                          score_fill=score_fill, phase_fill=phase_fill,
                          attributes_fill=attributes_fill, tabix=tabix))
    if not recs:
        return None
    if dtype is None:
        dtype = [('seqid', object),
                 ('source', object),
                 ('type', object),
                 ('start', int),
                 ('end', int),
                 ('score', float),
                 ('strand', object),
                 ('phase', int)]
        if attributes:
            for n in attributes:
                dtype.append((n, object))
    a = np.rec.fromrecords(recs, dtype=dtype)
    return a