2016-08-12 5 views
0

У меня есть двоичный файл, который я читаю, содержащий массив типа данных:Как читать определенные поля из двоичного файла с помощью numpy?

dt_particles = np.dtype([('id', np.int64), \ 
         ('x', np.float32), \ 
         ('y', np.float32), \ 
         ('z', np.float32), \ 
         ('vx', np.float32), \ 
         ('vy', np.float32), \ 
         ('vz', np.float32)]) 

Я могу читать весь массив dt_particles элементов с помощью:

numpy.rec.fromfile(FILE_OBJ, dtype=dt_particles, shape=NUM_ELEMENTS) 

Как я прочитал только id поле из двоичного файла и пропустить другие поля?

ответ

0

Я не использовал fromfile много, но я сомневаюсь, можно ли читать выбранные поля. Очевидно, что для определения макета и интервалов элементов используется dtype. Нет параметров, таких как usecols в genfromtxt, чтобы читать выбранные поля или столбцы. И не можете сказать, прочитайте 8 байтов и пропустите следующие 6 * 4 байта.

Просто прочитайте все это и выберите нужное поле. В любом случае, он должен прочитать весь файл.

+0

Хорошо, мое единственное беспокойство заключалось в том, что я использую большие файлы данных, и я хотел пропустить как можно больше ненужной обработки. Если numpy все равно читает весь файл, это не имеет большого значения. – hazrmard

+0

Выполнение 'read 8 bytes',' seek forward 24', повторяется до конца файла, будет намного медленнее, чем читать файл в 1028 байтовых фрагментах (или больше) и обрабатывать их. Если вы ограничиваете количество элементов, тогда вам не нужно читать весь файл; но любое поле распространяется через файл. – hpaulj

Смежные вопросы