Jupyter notebook에서 Nim을 사용하여 그래프 시각화까지

7082 단어 JupyterPython3Nim

오늘은



너무 많은 수요가 없을 수도 있지만,
Nim을 Jupyter notebook에서 사용할 수 있도록합시다.
이를 위해 INim을 사용합니다.



환경


  • Macbook12 inch
  • Nim 0.18.0
  • Python:3.5.5
  • matplotlib가 설치되어 있다고 가정합니다.


  • install



    동작에 필요한 ZeroMQ를 도입합니다.
    $ brew install zmq
    

    INim을 도입합니다.
    $ git clone https://github.com/stisa/Inim
    $ cd Inim
    $ nimble install
    

    동작



    특히 Python과는 다르지 않습니다. 아래와 같이 명령을 입력하여
    커널을 Nim으로 바꿉니다.
    $ jupyter notebook
    



    나머지는 파이썬처럼 Nim 코드를 작성할 수 있습니다.

    그래프 시각화


  • 일반 (?) 단지 문법 연습을 위해서라면 위의 설정까지 충분합니다.
    시작 부분의 이미지처럼 그래프를 그리는 데는 많은 노력이 필요합니다.
    이것은 내부에서 Python의 matplotlib을 Nim에서 호출하기 때문입니다.
  • Python 호출은 종속 라이브러리 python3를 사용합니다.

  • 이하 python3 라고 쓸 때는 이 Nim의 라이브러리를 가리키기로 하겠습니다.

    python3의 예비 지식



    분명히 python3에서는 Python을 static 또는 dynamic으로 바인딩하는 방법이있는 것 같습니다. 어쨌든 Nim을 컴파일 할 때 Python의 헤더 파일과 라이브러리를 지정하여 빌드하는 방법을 우선 빌드하고 런타임에 Python의 공유 라이브러리를 참조하는 방법을 얻을 수있는 것 같습니다. 여기에서는 잘 동작한 dynamic 의 방법을 채용합니다.

    절차 1 libpython3.5m.dylib 복사



    멋지지만 libpython3.5m.dylib를 실행하는 노트북과 동일한 계층에 복사합니다. 아마 패스를 통해서 두면 좋다고 생각합니다.

    이것은 내 pyenv 환경에서 .pyenv/versions/miniconda3-3.19.0/lib에 있습니다. 

    순서 2 리네임



    python3이 인식 할 수 있도록 복사 한 libpython3.5m.dyliblibpython3.5.dylib로 이름을 바꿉니다. ( m 지우기만)

    3단계 Jupyter notebook 셀에 코드 작성



    다음과 같이 셀에 코드를 씁니다.
    #>inlineplot 320 240
    #>flags -d:py3_version=3.5 -d:py3_dynamic
    
    show:  
        plot(@[0.0,0.5,1],@[0.0,1,2],"b","--","o","dots")
        xlabel("dotssss")
        legend()
        plot(@[0.0,0.2,0.8],@[0.0,1,2],"r","-","o","dotsline")
    

    여기서 #>는 Nim 커널의 매직 커맨드와 같습니다. #>inlineplot 320 240에서 Python에서 말하는 곳의 %matplotlib inline 역할을하는 것 같습니다.
    내부에서는 import inim/pyplot 를 하고 있는 것 같네요.

    또, #>flags -d:py3_version=3.5 -d:py3_dynamic로 Nim의 코드(여기에서는 셀로 쓴 것)를 컴파일할 때에 건네주는 플래그를 건네줄 수 있는 것 같습니다(아래의 덤도 참조). pye_version는 각자의 Python 버전에 맞게 변경하십시오.

    절차 4 실행



    Shift + Enter로 실행하면 그래프가 플롯됩니다.

    죄송합니다.

    덤 1



    Jupyter notebook을 사용하지 않고도 그리기 기능을 사용할 수 있습니다.
    예를 들어 다음과 같은 코드를 작성합니다.

    plottest.nim
    import inim/pyplot
    
    show:  
        plot(@[0.0,0.5,1],@[0.0,1,2],"b","--","o","dots")
        xlabel("dotssss")
        legend()
        plot(@[0.0,0.2,0.8],@[0.0,1,2],"r","-","o","dotsline")
    

    컴파일하고 실행합니다. 이 경우에도 libpython3.5.dylib가 필요합니다.
    $ mkdir inimtemp
    $ nim c -d:py3_version=3.5 -d:py3_dynamic plottest.nim
    $ ./plottest 
    

    실행 결과는 ./inittemp 바로 아래에 저장됩니다. 그래서이 폴더를 mkdir하지 않으면 안됩니다.

    덤 2



    static 으로 빌드할 때는 아마도 Python의 헤더나 라이브러리의 패스를 가르치지 않으면 안 될 것 같습니다.
    --cincludes:DIR --clibdir:DIR --clib:LIBNAME 또는 Nim의 컴파일 옵션에 전달해야합니다.

    주의하고 싶은 것이 static 또는 dynamic 에서 호출하는 API의 이름이 다르므로 소스 코드를 쫓아야합니다. Example을 보면 dynamic의 예가 충실해 보인다.

    마지막으로



    Nim 전파시키지 않는다.

    좋은 웹페이지 즐겨찾기