Примечание. Здесь я делаю предположения, поскольку не знаком с файлами .H5 и кодом Python, который обращается к ним.
Я думаю, что происходит то, что когда вы «загружаете» массив, вы на самом деле не загружаете массив. Вместо этого я думаю, что объект создается поверх файла. Вероятно, он считывает размеры и информацию, связанную с организацией файла, но не читает файл целиком.
Этот объект настолько хорошо имитирует массив, что когда вы позже выполняете операцию среза, может быть выполнена обычная операция среза Python, но в этот момент считываются фактические данные. Вот почему срез занимает так много времени по сравнению с «загрузкой» всех данных.
Я прихожу к такому выводу из-за следующего.
Если вы читаете 75 кадров размером 3584x3584 пикселей, я предполагаю, что они несжатые (H5, кажется, просто сырые дампы данных), и в этом случае 75 * 3,584 * 3,584 = 963,379,200, это около 918 МБ. данных. Соедините это с тем, что вы «читаете» это за 180 мс, мы получаем такой расчет:
918MB / 180ms = 5.1GB/second reading speed
Обратите внимание, это число относится к пикселям размером 1 байт, что также маловероятно.
Таким образом, такая скорость кажется маловероятной, поскольку даже самые лучшие твердотельные накопители сегодня достигают скорости менее 1 ГБ/с.
Кажется гораздо более правдоподобным, что объект просто создается поверх файла, а операция среза влечет за собой затраты на чтение как минимум 1 кадра данных.
Если мы разделим скорость на 75, чтобы получить скорость для каждого кадра, мы получим скорость 68 МБ/с для 1-байтовых пикселей, а с 24 или 32-битными пикселями мы получим скорость чтения до 270 МБ/с. Гораздо правдоподобнее.
person
Lasse V. Karlsen
schedule
09.05.2014