Использование NumPy и Cpython с Jython
Я должен использовать коммерческую библиотеку Java и хотел бы сделать это с Python. Jython является надежным, и я в порядке, поскольку это несколько выпусков точек. Однако я хотел бы использовать NumPy, что явно не работает с Jython. Такие опции, как CPype и числовые библиотеки Java, непривлекательны. Первый по сути мертв. Последние в основном незрелые и не имеют простоты использования и широкого признания NumPy. Мой вопрос: как можно взаимодействовать Jython и Python? Для меня было бы приемлемым назвать Jython от Cpython или наоборот.
Ответы
Ответ 1
Это иронично, учитывая, что Jython и Numeric (предки NumPy) были инициированы одним и тем же разработчиком (Джим Хьюгунин, который затем перешел к тому, чтобы инициировать IronPython и теперь имеет какую-то должность старшего архитектора в Microsoft, работая над всеми видами поддержка динамических языков для .NET и Silverlight), что нет действительно хорошего способа использования numpy в Jython. Ближайшим к тому, что я знаю, является "jnumerical" проект - (дефицитные) документы находятся на sourceforge, но обновленные источники находятся на bitbucket.
"Числовой Python", что jnumerical реализует, не настолько гладкий и оптимизированный, как его потоковый потомок, но он имеет одинаковую функциональность и разделяет много концепций и философии, поэтому, возможно, вы можете найти его пригодным для использования - стоит проверяя, по крайней мере.
Ответ 2
Рассмотрите возможность использования execnet, что позволяет сочетать сильные стороны как Jython, так и CPython, включая текущий NumPy. Недостатком здесь является то, что вам придется заплатить за сериализацию/десериализацию объектов между двумя интерпретаторами в двух разных пространствах процессов. (Вы можете избежать сетевых издержек, используя поддержку подпроцесса.) Но такая комбинация может работать хорошо, учитывая, что вы рассматриваете JPype, который будет иметь схожие (и, вероятно, более высокие) накладные расходы. Просто убедитесь, что вы правильно разделили работу.
Разработчики Jython (и я один из них) рассматривают поддержку NumPy в будущем, используя поддержку C Extension API, но это очень предварительное планирование.
Ответ 3
Отказ от ответственности: у него не было опыта с ним еще
Похоже, что JyNI - собственный интерфейс Jython - это путь.
Там также есть новый вопрос, который может иметь более новые альтернативы.
Ответ 4
Я очень много разбираюсь в API расширения Jython C! Это было бы замечательно!
Пока, этот момент, я думаю, у вас есть две альтернативы:
-
http://jepp.sourceforge.net/ для встраивания python в java, у него хорошая консоль. Недостаток, для меня слишком большой недостаток, заключается в том, что он должен быть скомпилирован против вашего собственного питона. И с обновлением python вам нужно перекомпилировать (я не хочу компилировать python, чтобы скомпилировать и использовать расширение - это также невозможно, особенно если код должен быть выполнен на разных машинах, например, на сетке )
-
http://lucene.apache.org/pylucene/jcc/ - это используется для lucene и для многих других проектов. Я лично использую его, чтобы обернуть движок GATE NLP, а также solr. Сделать это доступным для Python. Jcc намного быстрее, чем (мертвый) JPype, вероятно, потому, что некоторые структуры данных (например, списки) оптимизированы, а также потому, что он взаимодействует с python ↔ java через расширение С++ (в соответствии с этим: http://www.slideshare.net/onyame/mixing-python-and-java стр. 30) Я попытался переместить 6 мил целых чисел в список между python и java, JPype был на несколько порядков медленнее (но я не помню числа)
Однако, используя Jcc, вы можете обернуть только общедоступные методы, и иногда это сложно, особенно если этот метод принимает или возвращает определенные java-объекты (короче говоря, JCC должен компилировать обертки также для переданных объектов, иначе все методы, использующие/возвращающие такие методы, недоступны). Поэтому, если вам не нужно распространять свой код, вам лучше работать с JEPP.
Ответ 5
Если вы придерживаетесь векторной и матричной математики, я предлагаю взглянуть на vectorz.
Это чистая реализация Java и на 100% пригодна для использования в jython. Я все еще не пробовал, но скоро, так как у меня есть такая же необходимость в поиске альтернативы numpy.