Вы можете использовать ctypes и иметь двойной массив (или массив с плавающей точкой) точно так же, как в C, вместо того, чтобы хранить свои данные в списке. Это довольно низкий уровень, но рекомендуется, если вам нужна высокая производительность и ваш список имеет фиксированный размер.
Вы можете создать эквивалент C
double array[100];
в Python, выполнив:
array = (ctypes.c_double * 100)()
Выражение ctypes.c_double * 100
дает класс Python для массива значений типа double, длиной 100 элементов. Чтобы подключить его к файлу, вы можете просто использовать buffer
, чтобы получить его содержимое:
>>> f = open("bla.dat", "wb")
>>> f.write(buffer(array))
Если ваши данные уже есть в списке Python, их упаковка в двойной массив может быть, а может и не быть быстрее, чем вызов struct
, как в принятом ответе Agf - я оставлю измерение, которое быстрее домашней работы, но весь код вам нужно это:
>>> import ctypes
>>> array = (ctypes.c_double * len(floatlist))(*floatlist)
Чтобы увидеть его как строку, просто сделайте: str(buffer(array))
- единственный недостаток в том, что вам нужно позаботиться о размере с плавающей точкой (float vs double) и зависимом от процессора типе float - модуль struct может позаботиться об этом для вас.
Большой выигрыш в том, что с массивом с плавающей запятой вы все еще можете использовать элементы в виде чисел, получая доступ к ним так же, как если бы он находился в простом списке Python, и в то же время был легко доступен в виде плоской области памяти с buffer
.