Использование NumPy и Cpython с Jython - PullRequest
14 голосов
/ 23 июня 2010

I должен использовать коммерческую библиотеку Java и хотел бы сделать это из Python. Jython крепок, и я доволен тем, что за ним стоит несколько точечных релизов. Однако я хотел бы, чтобы также использовал NumPy, что, очевидно, не работает с Jython. Такие параметры, как CPype и числовые библиотеки Java, не имеют значения. Первый по сути мертв. Последние в основном незрелые и лишены простоты использования и широкого признания NumPy. Мой вопрос: как можно взаимодействовать между Jython и Python? Для меня было бы приемлемо вызвать Jython из Cpython или наоборот.

Ответы [ 5 ]

18 голосов
/ 23 июня 2010

Это иронично, учитывая, что Jython и Numeric (предок NumPy) были инициированы одним и тем же разработчиком (Джимом Хьюгининым), который затем перешел также к инициации IronPython и теперь занимает какую-то должность старшего архитектора в Microsoft, работая над всеми видамиподдержка динамических языков для .NET и Silverlight), что действительно хороший способ использовать Numpy в Jython.Самым близким к этому, о чем я знаю, является проект «jnumeric» - (дефицитные) документы находятся на sourceforge , но обновленные источники на bitbucket .

«Числовой Python», который реализует jnumeric, не такой гладкий и обтекаемый, как его обтекаемый потомок, но он обладает примерно той же функциональностью и разделяет многие концепции и философию, так что, возможно, вы найдете его пригодным для использования -стоит проверить, как минимум.

7 голосов
/ 20 августа 2010

Рассмотрите возможность использования execnet , которая позволяет объединить сильные стороны Jython и CPython, включая текущий NumPy. Недостатком здесь является то, что вам придется платить за сериализацию / десериализацию объектов между двумя интерпретаторами в двух разных пространствах процессов. (Вы можете избежать издержек сети, используя поддержку подпроцесса.) Но такая комбинация может работать хорошо, учитывая, что вы рассматриваете JPype, который будет иметь аналогичные (и, вероятно, более высокие) издержки. Просто убедитесь, что вы правильно распределили работу.

Разработчики Jython (и я один из них) рассчитывают на поддержку NumPy в будущем через поддержку C Extension API, но это действительно очень предварительное планирование.

3 голосов
/ 22 ноября 2015

Отказ от ответственности: еще не имел опыта работы с ним

Похоже на JyNI - собственный интерфейс Jython - это путь.Также опубликован новый вопрос , в котором могут быть более новые альтернативы.

2 голосов
/ 11 января 2011

Я выгляжу очень смешно с Jython C Extension API! Это было бы здорово!

До этого момента, я думаю, у вас есть две альтернативы:

  • http://jepp.sourceforge.net/ для встраивания Python в Java, он имеет хорошую консоль. Недостаток, для меня слишком большой недостаток, состоит в том, что он должен быть скомпилирован с вашим собственным питоном. А с обновлением python вам придется перекомпилировать (я не хочу компилировать python, чтобы скомпилировать и использовать расширение - это также невозможно, особенно если код должен выполняться на разных машинах, например на grid) )

  • http://lucene.apache.org/pylucene/jcc/ - используется для люцена и многих других проектов. Я лично использую это, чтобы обернуть двигатель GATE NLP, а также solr. Чтобы сделать это доступным для Python. Jcc намного быстрее, чем (мертвый) JPype, возможно потому, что оптимизированы некоторые структуры данных (например, списки), а также потому, что он взаимодействует с Python <-> Java через расширение C ++ (согласно этому: http://www.slideshare.net/onyame/mixing-python-and-java стр. 30) Я пытался переместить 6 миллионов целых чисел в списке между python и java, JPype был на несколько порядков медленнее (но я не помню числа)

Однако, используя Jcc, вы можете обернуть только открытые методы, и иногда это сложно, особенно если этот метод получает или возвращает определенные объекты Java (короче говоря, JCC должен компилировать оболочки также для переданных объектов, в противном случае все методы, использующие / возвращающие такие методы, недоступны). Так что если вам не нужно распространять свой код, вам лучше использовать JEPP.

1 голос
/ 19 февраля 2017

Если вы придерживаетесь векторной и матричной математики, я предлагаю взглянуть на vectorz .Это чистая реализация Java и должна быть на 100% пригодной для использования внутри jython.Я все еще не пробовал, но скоро это сделаю, поскольку у меня есть такая же необходимость в поиске альтернативы.

...