はじめに
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)
グラフを2つ書く時はどうするのだろう?もうひとつセルをつくるのかな 3_jupyter_notebooks_advanced_featuresによればいろいろできそう。
PYNQのJupyter notebook front endの拡張機能
3_jupyter_notebooks_advanced_featuresを試してみる
shellの呼び出し
! ifconfig
files = ! ls |head -3
print(files)
opt="-al"
!ls {opt}
###magicを使う
1行に有効なline magics,セルに有効なcell magicsがある。
line magicsは'%'ではじまり、cell magicsは'%%'で始まる。
%lsmagic
%%perl
print "foo"