Труба NumPy данные в Linux?

1

Можно ли передавать данные numpy (с одного python script) в другой?

предположим, что script1.py выглядит следующим образом:

x = np.zeros(3, dtype={'names':['col1', 'col2'], 'formats':['i4','f4']})

print x

Предположим, что из командной строки linux я запускаю следующее:

python script1.py | script2.py

Будет ли script2.py получать данные о нулевом канале в качестве входных данных (stdin)? будут ли данные по-прежнему находиться в одном формате numpy? (чтобы я мог, например, выполнить numpy операции с ним изнутри script2.py)?

Теги:
numpy
pipe

3 ответа

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

Нет, данные передаются по каналу в виде текста. Перед записью вам нужно будет сериализовать данные в script1.py и десериализировать его в script2.py после прочтения.

  • 0
    Быстрый и грязный способ сделать сериализацию - использовать функцию python repr . Замените print x на print repr(x) в script1.py, а затем вызовите скрипт script2.py eval для десериализации выходных данных script1.py
  • 0
    Спасибо вам, ребята. У меня есть пустой массив, который нужно записать в двоичный файл, и я просто подумал, что конвейерная обработка сделает весь процесс быстрее (т.е. один процесс вычисляет, один процесс записывает). У вас есть другие идеи, чтобы сделать это быстрее?
Показать ещё 1 комментарий
3

Проверьте функции save и load. Я не думаю, что они будут возражать против передачи прототипа вместо файла.

0

См. этот вопрос.

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

Ещё вопросы

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