Каждый раз, когда вы выполняете эту строку:
array[line_num, :] = process_data(line)
... zarr (1) выясняет, какие фрагменты перекрывают область массива, в которую вы хотите записать, (2) извлекает эти фрагменты из хранилища , (3) распаковать фрагменты, (4) изменить данные, (5) сжать измененные фрагменты, (6) записать измененные сжатые фрагменты в хранилище.
Это произойдет независимо от типа базового хранилище, которое вы используете.
Если вы создали массив с фрагментами высотой более одной строки, то это, вероятно, будет неэффективным, в результате каждый фрагмент будет считываться, распаковываться, обновляться, сжиматься и записываться много раз .
Лучшей стратегией было бы проанализировать ваш входной файл блоками по N строк, где N равно количеству строк в каждом фрагменте выходного массива, так что каждый фрагмент сжимается и записывается только один раз.
Если под VCF вы имеете в виду файлы Variant Call Format, вы можете посмотреть на реализацию функции vcf_to_zarr в scikit-allel.