Подтвердить что ты не робот

Лучший способ запуска кода Julia в ноутбуке IPython (или код Python в ноутбуке IJulia)

Моя цель - запустить только несколько строк Джулии в ноутбуке IPython, где большая часть кода будет Python для некоторых экспериментов...

Я нашел здесь приятный пример ноутбука:

http://nbviewer.ipython.org/github/JuliaLang/IJulia.jl/blob/master/python/doc/JuliaMagic.ipynb

И теперь мне интересно, как я буду устанавливать расширение IPython для Julia (я в основном использую IPython 2.1), чтобы загрузить его через

%load_ext julia.magic

Я также очень новичок в julia, и мне интересно, есть ли преимущество в производительности "mix numpy and julia", как показано в этом ноутбуке (с помощью обычного Python numpy или обычного кода Julia).

Когда я правильно понимаю концепцию, я бы использовал записные книжки IJulia (которые я установил успешно), если меня интересует только код Julia?

Я установил IJulia, и я также могу запускать ноутбуки IJulia, но на самом деле я хотел только иметь небольшую часть кода Julia в своем ноутбуке, остальное должно быть Python/Cython. К сожалению, я читал, что магические функции еще не полностью поддерживаются: "Одно отличие от IPython заключается в том, что ядро ​​IJulia в настоящее время не поддерживает" магию ", которые являются специальными командами с префиксом% или %% для выполнения кода на другом языке"

Есть ли способ запустить код Python в ноутбуках IJulia?

4b9b3361

Ответ 1

Запустите Джулию внутри ноутбука IPython


Hack

Чтобы запустить фрагменты Джулии (или другой язык) внутри ноутбука IPython, я просто добавляю строку 'julia' в список default в методе _script_magics_default из ScriptMagics класс в:

  • /usr/lib/python3.4/site-packages/IPython/core/magics/script.py или
  • /usr/lib/python2.7/site-packages/IPython/core/magics/script.py.

Пример:

# like this:
defaults = [
    'sh',
    'bash',
    'perl',
    'ruby',
    'python',
    'python2',
    'python3',
    'pypy',
    'julia', # add your own magic
]

IPython *Julia magic*

Юля Магия (двунаправленная)

Чтобы использовать %load_ext julia.magic, вам нужно запустить setup.py здесь:

Обновление (09/04/2014): файл setup.py перенесен в pyjulia.jl:

Что вы получаете, когда Pkg.add("IJulia") клонирует репо в вашей файловой системе:

cd ~/.julia/v0.3/IJulia/python/
sudo python2 setup.py install

Забастовкa >

В настоящее время это работает только для меня в Python2. Python3 жалуется:

ImportError: No module named 'core'

когда я пытаюсь загрузить расширение, но устанавливает без жалоб.

После его установки вы также можете сделать это изнутри Python2:

from julia import Julia
j = Julia()
arr = j.run('[1:10]')
type(arr) # numpy.ndarray

Выполнение script из вашей системной оболочки

Используйте синтаксис режима оболочки в ячейке ноутбука:

!julia my_script.jl



Запустите Python внутри ноутбука IJulia


Использование PyCall

На самом деле это не работает код python в нужном вам контексте, но вы также можете использовать библиотеки Python изнутри Julia:

using PyCall
@pyimport math
println(math.pi)

Выполнение script из вашей системной оболочки

Используйте синтаксис режима оболочки в ячейке ноутбука:

;python my_script.py

Ответ 2

Другой вариант - использовать Beaker. У них есть учебный ноутбук, который смешивает R и Python; использование Джулии так же просто.

Ответ 3

Если вы хотите запустить целый блокнот только julia (или там, где вы называете другие языки только из julia), тогда есть более чистое решение. Сначала запустите julia и сделайте

Pkg.add("IJulia")

чтобы получить пакет IJulia. Тогда вы можете

ipython notebook --profile julia

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

h/t Дэвиду Сандерсу и его отличным учебникам julia, которые написаны на IPython-ноутбуках; здесь.

Ответ 4

Чтобы завершить этот хороший ответ, без каких-либо взломов и без изменения какого-либо системного файла простое решение с волшебство %%script:

In [1]: %%script julia
   ...: println("Hi from a Julia sub-process")
   ...: a = [1:10]

Будьте осторожны с тем, что ячейка была запущена в подпроцессе, поэтому все, что было сделано в ней, не доступно остальной частью сеанса IPython:

In [2]: print("Hi from the main IPython process")
   ...: print(a)  # <-- not available from the Julia code, will fail !
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-2-c5a4f3535135> in <module>()
----> 1 print(a)

NameError: name 'a' is not defined

Ответ 5

В этом ноутбуке описан чистый и приятный метод: https://github.com/binder-examples/julia-python/blob/master/python-and-julia.ipynb.

Он сильно использует магию IPython (%julia <julia code> inlined в ячейках Python и %%julia), но результат впечатляет: два процесса Python и Julia могут использовать одни и те же переменные и память.