это очень странно
Я читаю некоторые (по общему признанию, очень большие: ~ 2 ГБ каждый) двоичные файлы, используя библиотеки numpy в Python. Я использую:
thingy = np.fromfile(fileObject, np.int16, 1)
метод. Это прямо в середине вложенного цикла — я делаю этот цикл 4096 раз на «канал», и этот цикл «канал» 9 раз для каждого «приемника», и этот цикл «приемник» 4 раза (всего 9 каналов). на приемник, которых 4!). Это для каждого «блока», из которых около 3600 на файл.
Как видите, это очень многократно, и я знаю, что это займет много времени, но это заняло НАМНОГО больше времени, чем я ожидал — в среднем 8,5 секунд на «блок».
Я провел несколько тестов, используя time.clock() и т. д., и обнаружил, что все идет так быстро, как должно быть, за исключением примерно 1 или 2 выборок на «блок» (то есть 1 или 2 в 4096 * 9 * 4), где казалось бы «застрять» на несколько секунд. Теперь это должен быть случай возврата простого int16 из двоичного файла, а не совсем то, что должно занимать секунды ... почему это застревает?
Из бенчмаркинга я обнаружил, что он каждый раз застревал в ОДНОМ и том же месте (блок 2, приемник 8, канал 3, образец 1085 был одним из них, для записи!), и он застревал там примерно на одно и то же время. время каждого запуска.
Любые идеи?!
Спасибо,
Дункан
fromfile()
заключается в том, что он не может заранее знать, сколько места нужно выделить, поэтому с действительно большими файлами вы можете облажаться. См. мой ответ и некоторые из следующих комментариев в stackoverflow.com/questions/1896674/ для возможных идей о том, как с этим справиться, и основной проблемы. - person Peter Hansen   schedule 16.02.2010del xx
, когда закончите? может гс раньше, может нет - person denis   schedule 19.02.2010fromfile()
означает, что массив должен каким-то образом расти, что приводит к большой активности памяти. Если вы заранее знаете размер, который вам нужен (который вам кажется), вы можете предварительно выделить, загрузить намного быстрее и избежать перегрузки памяти, которая кажется вашей основной проблемой. Я думаю, чтоfromfile()
может быть, как иprint
иinput()
, предназначено для упрощенных ситуаций. - person Peter Hansen   schedule 27.02.2010