LINUX.ORG.RU

Питон и бинарные данные.

 


0

1

Я себе несколько представляю устройство питона, а несколько и не представляю. Больше даже не представляю... То есть я понимаю, почему на большом кол-ве задач он по скорости не будет уступать C++ вообще, зато будет быстрее разработка и меньше глюкодрома. А как у питона в плане работы с 8-битными байтами и их изменением в памяти? Могу я вот загрузить в память 100 мегабайт данных из файла и адресоваться к ним, как к массиву байтов, менять их в памяти, копировать между массивами и потом сохранять в бинарный? Есть там средства для оперирования например 4- или 8-байтными little-endian и big-endian целыми числами, не целыми числами? Хочу кросс-платформенно сохранять и считывать и обрабатывать бинари на питоне, сохранённые до этого из C++ в известный бинарный формат. Формировать WAV-файлы в памяти, сохранять на диск и т.п.

Посоветуйте ключевые классы, модули питона.

Насколько тормознее будет программа, написанная на питоне, чем написанная на C++, задача которой, например, загрузить 2 матрицы по 100 мегабайт каждая, перемножить, взять какие-нибудь логарифмы от каждого элемента, чё-нибудь отсортировать и сохранить в другой файл?

Если тормоза будут составлять всего процентов 5, то таки ура товарищи.

★☆

Последнее исправление: kiverattes (всего исправлений: 1)

адресоваться к ним, как к массиву байтов, менять их в памяти, копировать между массивами и потом сохранять в бинарный?

отчего ж нет

Есть там средства для оперирования например 4- или 8-байтными little-endian и big-endian

если ты их сам можешь написать, то наверно и есть

всего процентов 5

проверь, расскажешь

nokachi
()

Если надо работать именно с матрицами как с математическими объектами, то смотри в сторону numpy

Gvidon ★★★★
()
Ответ на: комментарий от nokachi

на кьют удобно решать задачи при минимальном оверхеде черновой работы. а чтобы выбрать тот же лисп - нужны веские основания.

VladimirMalyk ★★★★★
()
Последнее исправление: VladimirMalyk (всего исправлений: 1)

Насколько тормознее будет программа, написанная на питоне, чем написанная на C++, задача которой, например, загрузить 2 матрицы по 100 мегабайт каждая, перемножить, взять какие-нибудь логарифмы от каждого элемента, чё-нибудь отсортировать и сохранить в другой файл?

Прочитать/записать бинарные данные можно будет довольно просто. Программа на питоне в общем случае будет тормознее и будет жрать больше памяти. Однако тормоза можно идентифицировать и ликвидировать. Для этого можно сделать с/c++ модули.

Если твердо известно, что нужно будет делать, то лучше писать сразу на c/c++.

ien
()
Ответ на: комментарий от VladimirMalyk

fix: тут у плюсов возможности те же что и кьюта

Так почему бы не взять плюсы без qt? Зачем линковать эти куте когда ntohl() имеется уже в стандартной библиотеке?

nokachi
()
Ответ на: комментарий от nokachi

недостатки линкования с кьютом - это не то чем стоить забивать себе голову. а если и стоит - на это опять же нужны веские причины.

VladimirMalyk ★★★★★
()

Я только знакомлюсь с Python, но инфраструтура сборки пакетов Python облегчает подключения расширений на С. Пользуйся профитами обоих

vertexua ★★★★★
()
Последнее исправление: vertexua (всего исправлений: 1)
Ответ на: комментарий от VladimirMalyk

Непонятно, при чём тут Qt, это же либа для гуёв. Тот факт, что в ней есть сетевая подсистема, всякие крутые типы данных не меняет того факта, что это либа для гуёв. А зачем мне либа для гуёв в математической софтине? У меня чё, и без либы для гуёв недостаточно средств? ))

kiverattes ★☆
() автор топика
Ответ на: комментарий от nokachi

но в STL нет сотен других вещей, которые могут потребоваться. банальный GUI превращается в головную боль. и как только захочется чего-то полезного, тут же сразу начнется черновая работа или метания в стиле http://stackoverflow.com/questions/1841298/c-stl-based-socket-library

Qt хорош именно тем, что в нем практически всегда найдется то что нужно

VladimirMalyk ★★★★★
()
Последнее исправление: VladimirMalyk (всего исправлений: 1)
Ответ на: комментарий от kiverattes

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

зы. если тебе нужна исключительно математика - почему тогда ты не используешь фортран?

VladimirMalyk ★★★★★
()
Ответ на: комментарий от kiverattes

это же либа для гуёв

это аналог JCL (или наоборот - т.к. Qt старше)

wota ★★
()
Ответ на: комментарий от VladimirMalyk

Потому, что я тупо не знаю фортран) А так бы юзал (-; А вообще, я люблю юзать что-нибудь широкораспространённое, к таким вещам можно отнести C++, Python и bash.

kiverattes ★☆
() автор топика

Для больших объемов данных, если производительность важна, на питоне пишется только верхний управляющий слой, а вся непосредственно обработка (тасования байтов, числодробление и пр) делается либо руками на С/Fortran/... либо при помощи уже сделанных кем то для питона библиотек.

AIv ★★★★★
()

Посоветуйте ключевые классы, модули питона.

numpy

Там всё это есть.

yvv ★★☆
()

Могу я вот загрузить в память 100 мегабайт данных из файла и адресоваться к ним, как к массиву байтов

Можно, только нужно записать байты в список и обращаться к ним по индексу.

XoFfiCEr ★★☆☆
()

ключевые либы: tkinter, django,

загрузить 2 матрицы по 100 мегабайт каждая, перемножить, взять какие-нибудь логарифмы от каждого элемента, чё-нибудь отсортировать и сохранить в другой файл

Написать тебе код?

XoFfiCEr ★★☆☆
()

Могу я вот загрузить в память 100 мегабайт данных из файла и адресоваться к ним, как к массиву байтов, менять их в памяти, копировать между массивами и потом сохранять в бинарный?

Для этой низкоуровневой задачи лучше подойдет Си (mmap(),указатели ..). Если это так уж необходимо рули библиотекой на Си из Питона.

Насколько тормознее будет программа, написанная на питоне, чем написанная на C++, задача которой, например, загрузить 2 матрицы по 100 мегабайт каждая, перемножить, взять какие-нибудь логарифмы от каждого элемента, чё-нибудь отсортировать и сохранить в другой файл?

Намного тормознее если не использовать внешних либ.

AIv все правильно сказал.

capricorn20
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.