Написать список комплексных чисел в виде двоичных данных

1

Я пытаюсь вывести некоторые данные из python script в двоичный файл.

Если у меня есть список поплавков, я использовал этот

out_file = open("filename", "wb")
float_array.array("f", [])
float_array.fromlist(mylist)
float_array.tofile(out_file)
out_file.close()

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

Как я могу сделать то же самое, но используя список сложных чисел?

Спасибо

  • 0
    Для комплексных чисел не существует стандартного двоичного представления (по крайней мере, о котором я знаю), поэтому вам сначала нужно решить, как вы хотите, чтобы они были представлены.
  • 0
    Я был бы счастлив иметь их как список пар или поплавков. Это не имеет большого значения, пока я могу прочитать их обратно.
Теги:

2 ответа

1
Лучший ответ

Вы можете создать сплющенный список поплавков из вашего сложного массива, например

flattend = [f for sublist in ((c.real, c.imag) for c in complex_list) for f in sublist]

и напишите это в файл.

  • 0
    Это маршрут, который я прошел в конце.
2

Не придумывайте свои собственные методы сериализации, когда Python предлагает так много хороших из коробки! Я предлагаю вам использовать рассол - он также работает со сложными числами (*):

>>> import pickle
>>> s = pickle.dumps([1+2j, 5-1j])
>>> pickle.loads(s)
[(1+2j), (5-1j)]

Я использую dumps для демонстрации здесь, вы также можете использовать dump, который записывает в двоичный файл.


(*) Из документа рассола:

Можно мариновать следующие типы:

  • Нет, True и False
  • целые числа, длинные целые числа, числа с плавающей запятой, комплексные числа
  • нормальные и Unicode строки
  • кортежи, списки, наборы и словари, содержащие только picklable объекты
  • функции, определенные на верхнем уровне модуля
  • встроенные функции, определенные на верхнем уровне модуля
  • которые определены на верхнем уровне модуля
  • экземпляры таких классов, чья __dict__ или __setstate__() является picklable (см. раздел The pickle * протокол).
  • 1
    Помните дамп при записи файла pickle для использования бинарного режима;)
  • 0
    Спасибо, я не уверен, что это сработает. Кажется, он пишет намного больше данных, чем я ожидаю. Мне нужно иметь возможность читать эти данные из кода C, поэтому мне нужны необработанные двоичные данные.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню