Edited at

第2回 はじめてのJupyter


はじめに

PYNQ第二回は、はじめてのJupyterです。

Webベースでプロジェクト管理ができるなんて、いい時代。

第1回 Setup PYNQ-Z1

第2回 はじめてのJupyter

第3回 pythonとPYNQ PL資源へのアクセス

第4回 PYNQ OVERLAY

第5回 PYNQのOverlayを作ってみた

第6回 カスタムIPを作ってPYNQ overlayに組み込む

第7回 PYNQのHDMI出力overlayを作る

番外編 python ジャンプスタート


付属ドキュメントを読む


つかみ

webでPYNQに接続して解説を読む(ながめる)

/notebooks/getting_started/1_jupyter_notebooks.ipynb

PYNQのDocs Juptter Notebooks

ふむふむ。ドキュメントとコードと結果をWebpageにひとまとめになっているという理解でいいのかな。

1ページ<-->1プロジェクト(文書、コード、永続化したデータ)ということ?


コンポーネント

説明文によれば、Jupiter Notebookは、「Notebook web アプリ」「カーネル」「Notebook ドキュメント」で構成されるとのこと。


  • Notebookドキュメントが、各ページの(文書、コード、永続化されたデータ)に相当

  • カーネルは処理系で、pythonやRuby,Rなどのプログラム言語のコードを実行する。PYNQ distributionのJupyter Notebookにインストールされているのはpythonだけ。(と書いてあるが、shellとか使える。あとで試す)

  • Notebook Webアプリが、それらページデータをWebページに変換するとともに、ブラウザ操作によって発行されたリクエストを処理してページデータを更新したり、データとコードをカーネルに渡して処理を行わせる。


NoteBookの基本

記述はcellと呼ばれるテキストフィールドに記入するようです。cellのタイプはページ上部のツールバーにて、cellやmarkdownなど選ぶことができます。


  • markdownを選び、cellにマークダウン記法に基づくテキストを入力すると、reload時にそれが反映されます。

  • codeを選び、そこにpythonのコード入力し、ツールバーの「|>RUN」をクリックすると、実行結果がセルの下に表示されます。


試してみよう

@taka4sato さんのJupyter事始めが詳しいですね。PYNQではすでにJupyterが起動しているのでいきなり「Jupyterの使い方」から始められる。

でも、そもそもpythonわかっていなかった!

番外編 python ジャンプスタートにすすむ


ターミナル

macOSのsafariからだど、キー入力ができないのですが、Michitaro Koike@stackoverflow さん jupyter-notebookのターミナルで半角の文字が入力できませんへの回答日本語入力の半角モードだとダメでABCならうまくいきました。に従って、「システム環境設定」/「キーボード」/「入力ソース」の画面の「+」ボタンから「英語」の[A]ABCを追加し、メニューバーでABCを選んだところ、無事入力できるようになりました。


advanced features

PYNQのJupyter notebookの高度な機能


input文

val = input('prompt')で textboxが現れて入力できる


Interactive input

引数の型に対応した入力領域が用意されて、値が変更されたところで自動的に関数を呼び出す。

interact(関数,引数1=値1,引数2=値2,...) booleanならチェックボックス、数値ならスライダーなどが現れる。

from ipywidgets import *

def ipdate(arg1,arg2,arg3):
...
arg1 = widgets.IntSlider(min=10,max=1000,step=1,value=10)
interact(update, arg1=arg1,arg2=False,arg3=True)

参考 Jupyter Widgets widget list


plot

plotもできます。

%matplotlib inline

import matplotlib.pyplot as plt # plot
import numpy as np # numpy
from ipywidgets import *

def update(fm,amp): # AM modulation
t=np.arange(0,2,0.01) # fc=10,t=[0.2]
y=(1+amp*np.sin(t*6.28*fm))*np.sin(t*6.28*10)
plt.plot(t,y)
plt.show()
amp=widgets.FloatSlider(min=0,max=0.5,step=0.1,value=0.3)
fm=widgets.FloatSlider(min=0.1,max=2,step=0.1,value=1)

interact(update,fm=fm,amp=amp)

plotの例

グラフを2つ書く時はどうするのだろう?もうひとつセルをつくるのかな 3_jupyter_notebooks_advanced_featuresによればいろいろできそう。


PYNQのJupyter notebook front endの拡張機能

3_jupyter_notebooks_advanced_featuresを試してみる


shellの呼び出し


shellの呼び出し

! ifconfig



shellの結果をpythonにわたす

files = ! ls |head -3

print(files)


pythonの値をshellに渡す

opt="-al"

!ls {opt}


magicを使う

1行に有効なline magics,セルに有効なcell magicsがある。

line magicsは'%'ではじまり、cell magicsは'%%'で始まる。


line_magicsの例_magic一覧の表示

%lsmagic



cell_magicsの例_perlを呼び出す

%%perl

print "foo"