SlideShare une entreprise Scribd logo
1  sur  39
Télécharger pour lire hors ligne
Cythonによる
拡張モジュール
開発	
2013/9/14 PyCon APAC 2013
Atsuo Ishimoto
自己紹介	
2
いしもと	
石本	
敦夫	
あつお	
p 書籍「パーフェクトPython」
著者の一員	
p http://www.gembook.org
p python.jp ドメインの管理者
p @atsuoishimoto
Pythonの拡張モジュール	
3
p 通常、C/C++で開発し、Pythonスクリプト
から利用できる関数・データ型を提供
p Pythonが動的にロードする共有ライブラリ
(*.so, *.pyd)
p 用途
l  Pythonからは呼び出せないCライブラリへ
のインターフェース
l  Pythonではパフォーマンス不足
拡張モジュールのめんどくささ	
4
C/C++が必要	
/* 一般的なC言語の例 */
int	
  i;main(){for(;i["]<i;++i){-­‐-­‐
i;}"];read('-­‐'-­‐'-­‐',i+++"hell	
  o,	
  
world!n",'/'/'/'));}read(j,i,p)
{write(j/p+p,i-­‐-­‐-­‐j,i/i);}	
  
	
  
The International Obfuscated C Code Contest 	
http://www.ioccc.org/1984/anonymous.c
拡張モジュールのめんどくささ	
5
関数・データ型定義がめんどう	
static PyMemberDef xx_memberlist[] = {
...
static PyGetSetDef xx_getsetlist[] = {
...
static PyTypeObject xx_Type = {
...
static PyMethodDef xx_methods[] = {
...
static PyModuleDef xx_module = {
...
PyMODINIT_FUNC
PyInit_xx(void)
{
...
拡張モジュールのめんどくささ	
6
参照カウント管理	
p Pythonのオブジェクトは、オブジェクトの被参照数
を正確にカウントする必要がある
p PyObject_SetItem()、PyList_SetItem()、
PyList_SET_ITEM()	
  の違いを覚えてますか?
p 間違えればメモリリークかコアダンプ
Cythonとは	
7
Python専用プログラミング言語	
p Pythonの拡張モジュールを開発するため
の専用プログラミング言語
p Pythonのほぼ上位互換
p インタープリタではなくコンパイラ
p Python2/3対応
p http://www.cython.org
Cythonの起源	
8
Pyrex 	
Cython	
Fork	
最終リリースは
2010/4/12	
2002/4/3
version 0.1 リリース
Cythonを採用したプロジェクト	
9
p lxml
http://lxml.de/
p Sage
http://www.sagemath.org/
p SciPy
http://www.scipy.org/
p PyYAML
https://bitbucket.org/xi/pyyaml
Pythonの構文で
C言語と同じ処理を書ける	
10
/*	
  C言語 */	
  
	
  
void	
  spam()	
  {	
  
	
  	
  void	
  *p	
  =	
  malloc(100);	
  
	
  	
  if	
  (!p)	
  {	
  
	
  	
  	
  	
  return;	
  
	
  	
  }	
  
	
  	
  if	
  (!ham())	
  {	
  
	
  	
  	
  	
  goto	
  exit;	
  
	
  	
  }	
  
	
  	
  egg();	
  
exit:	
  
	
  	
  free(p);	
  
}	
  
#	
  Cython	
  
	
  
def	
  spam():	
  
	
  	
  cdef	
  void	
  *p	
  =	
  malloc(100)	
  
	
  	
  if	
  p:	
  
	
  	
  	
  	
  	
  	
  try:	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  if	
  not	
  ham():	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  return	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  egg()	
  
	
  	
  	
  	
  	
  	
  finally:	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  free(p)	
  
Cythonの文法	
11
基本は
Python2 とほぼ同じ!	
def	
  qsort(L):	
  
	
   if	
  len(L)	
  <=	
  1:	
  
	
   return	
  L	
  	
  
	
   return	
  (	
  
	
  	
  	
  	
  	
  	
  	
  	
  qsort([lt	
  for	
  lt	
  in	
  L[1:]	
  if	
  lt	
  <	
  L[0]])	
  	
  
	
   +	
  [L[0]]	
  	
  
	
   +	
  qsort(	
  
	
   [ge	
  for	
  ge	
  in	
  L[1:]	
  if	
  ge	
  >=	
  L[0]]))	
http://code.activestate.com/recipes/66473-just-for-fun-quicksort-in-3-lines/
Cythonの関数・型定義	
12
かんたん	
cdef	
  class	
  Spam:	
  
	
  	
  	
  	
  cdef	
  double	
  attr1	
  
	
  	
  	
  	
  cdef	
  public	
  double	
  public_attr	
  
	
  	
  	
  	
  cdef	
  readonly	
  double	
  public_attr2	
  
	
  	
  	
  	
  	
  
	
  	
  	
  	
  def	
  ham(self):	
  
	
  	
  	
  	
  	
  	
  	
  	
  return	
  self.attr1	
  
アーリーバインディング	
13
変数の型宣言
も
できる!	
def	
  spam(dict	
  d):	
  
	
  	
  	
  	
  return	
  len(d)	
  
型チェックは静
的・動的両方	
def	
  spam(dict	
  d):	
  
	
  	
  cdef	
  list	
  L	
  	
  
	
   L	
  =	
  d	
  
	
   #	
  コンパイルエラーに	
  
	
   #	
  ならない	
  
Cythonコードの最適化	
14
cdef	
  int	
  i	
  
for	
  i	
  in	
  range(100):	
  
	
  	
  	
  	
  …	
  
cdef	
  int	
  i	
  =	
  0	
  
while	
  i	
  <	
  100:	
  
	
  	
  	
  	
  …	
  
	
  	
  	
  	
  i	
  +=	
  1	
  
オブジェクトアクセスの最適化	
15
Cythonコード	
 生成されるCコード	
型宣言なし	
 item = obj[n]	
  
item = PyObject_GetItem(
obj, n)
	
  
型宣言あり	
cdef tuple obj
cdef int n
item = obj[n]	
  
item = PyTuple_GET_ITEM(
obj, n)	
  
C/C++ライブラリの利用	
16
#	
  Python.h の PyMem_Malloc() を宣言	
  
cdef	
  extern	
  from	
  "Python.h"	
  
	
  	
  	
  	
  void*	
  PyMem_Malloc(size_t	
  n)	
  
	
  
def	
  spam():	
  
	
  	
  	
  	
  cdef	
  void	
  *p	
  
	
  	
  	
  	
  p	
  =	
  PyMem_Malloc(100)	
  
	
  	
  	
  	
  if	
  not	
  p:	
  
	
  	
  	
  	
  	
  	
  	
  	
  raise	
  MemoryError()	
  
ヘッダファイルから関数や構造体をインクルード
定義済みライブラリ	
17
標準Cランタイム関数な
どは定義済み	
from	
  libc.math	
  cimport	
  sin	
  
	
  	
  
def	
  std_sin(x):	
  
	
  	
  	
  	
  return	
  sin(x*x)	
  
p 関数・構造体・定数など
をCythonで定義してあ
る
p cimport文でインポート
するだけで利用可能
定義済みライブラリ(抜粋)	
18
種類	
 モジュール名	
Python API	
 cpython.object	
 PyObject_XXXの定義	
python.dict	
 PyDict_XXXの定義	
…	
C標準ライブラリ	
 libc.stdio	
 stdio.hで定義された関数	
libc.stdlib	
 stdlib.hで定義された関数	
…	
C++標準ライブラリ	
 libcpp.list	
 std::listの定義	
libcpp.string	
 std::string の定義	
…	
numpy	
 numpy	
 numpy API の定義	
OpenMP	
 openmp	
 OpenMP API の定義	
Posix標準ライブラリ	
 posix.fcntl	
 fcntl.hで定義された関数	
…
C/C++のデータ型	
19
cdef キーワードで
変数宣言	
def	
  spam():	
  
	
  	
  	
  	
  cdef	
  double	
  value	
  
	
  	
  	
  	
  value	
  =	
  100.0	
  *	
  200	
  
	
  	
  	
  	
  return	
  value	
  
ポインタや配列も	
def	
  spam(s):	
  
	
  	
  	
  	
  cdef	
  char	
  p,*q	
  
	
  	
  	
  	
  p	
  =	
  s[0]	
  
	
  	
  	
  	
  q	
  =	
  &p	
  
	
  	
  	
  	
  return	
  q[0]	
  	
  	
  #	
  *qは不可	
  
自動型変換	
20
def	
  spam(n):	
  
	
  	
  	
  	
  cdef	
  int	
  number	
  
	
  	
  	
  	
  number	
  =	
  n	
  	
  
p Pythonオブジェクトを、C
のint型の値に変換
p 変換不能な場合は例外を
送出	
int	
  number	
  =	
  PyInt_AS_LONG(n)	
  
文字列の自動変換	
21
def	
  spam(L):	
  
	
  	
  	
  	
  cdef	
  char	
  *s	
  =	
  "ham"	
  
	
  	
  	
  	
  L.append(s)	
  
p 文字列 s を Pythonのstrオブジェクト
(Python3ではbytes)に変換
p strオブジェクト -> char * も変換される
GIL制御	
22
言語としてGILを
サポート	
p GIL: Global Interpreter Lock
p Pythonスクリプトが、複数のス
レッドで同時に実行されないよう
に制御する仕組み
p PythonのC APIを使わない処理
の間は、GILを開放すると並列
処理の効率が向上するケースも
with	
  nogil:	
  
	
  	
  	
  #GILを開放し、他のスレッド	
  
	
  	
  	
  #でPython実行を許可する	
 	
	
  	
  	
  f	
  =	
  fopen(fname,"w")	
  
	
  	
  	
  …	
  
C++サポート	
23
from	
  collections	
  import	
  defaultdict	
  
	
  	
  
def	
  freq(values):	
  
	
  	
  	
  	
  #	
  要素に、同じ値が何個あるか	
  
	
  	
  	
  	
  #	
  数え上げる	
  
	
  
	
   d	
  =	
  defaultdict(int)	
  
	
   for	
  v	
  in	
  values:	
  
	
   d[v]	
  +=	
  1	
  
#	
  distutils:	
  language	
  =	
  c++	
  
	
  
from	
  libcpp.map	
  cimport	
  map	
  
	
  	
  
def	
  freq(list	
  values):	
  
	
  	
  	
  	
  #	
  std::map を使用	
  
	
  	
  	
  	
  cdef	
  map[int,	
  int]	
  d	
  	
  
	
  	
  	
  	
  cdef	
  int	
  v	
  
	
  	
  
	
  	
  	
  	
  for	
  v	
  in	
  values:	
  
	
  	
  	
  	
  	
  	
  	
  	
  d[v]	
  +=	
  1	
  
Distutils:で、C++
ファイルの生成を指示
Cythonのビルド	
24
Cythonソースファイル
(*.pyx *.pyd *.pxi)
cythonコマンド	
Cソースファイル
(*.c *.cpp)
Cコンパイラ・リンカ
Python拡張モジュール
(*.so *.pyd)
Distutilsでビルド	
25
from	
  distutils.core	
  import	
  setup	
  
from	
  Cython.Build	
  import	
  cythonize	
  
	
  	
  
setup(	
  
	
  	
  name	
  =	
  "hello",	
  
	
  	
  ext_modules	
  =	
  cythonize(	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  'hello.pyx'))	
  
通常の拡張モジュー
ルと同じく、setup.py
を作成	
setup.pyで
ビルド・インストール	
$	
  python	
  setup.py	
  build_ext	
  
$	
  python	
  setup.py	
  install	
  
対話コンソールでビルド	
26
pyximport.install()
で、pyxファイルを自
動的にビルドしてイ
ンポート	
#	
  hello.pyxをコンパイルし、	
  
#	
  拡張モジュールをインポートする	
  
>>>	
  import	
  pyximport	
  
>>>	
  pyximport.install()	
  
(None,pyximport.	
  …)	
  
>>>	
  import	
  hello	
  
	
  	
  
(コンパイル・リンクオプションを指定する場合には使えない)
CythonはPythonより速い?	
27
Pythonはインタープリ
タだから遅い	
Cythonはコンパイル
して実行するから速い
ベンチマーク	
28
def	
  newton(n):	
  
	
  	
  guess	
  =	
  n/2	
  
	
  	
  better	
  =	
  (guess	
  +	
  n/guess)/2	
  
	
  	
  while	
  better	
  !=	
  guess:	
  
	
  	
  	
  	
  guess	
  =	
  better	
  
	
  	
  	
  	
  better	
  =	
  (guess	
  +	
  n/guess)/2	
  
	
  	
  return	
  guess	
  
パフォーマンス比較	
29
$ python -m timeit -c 'import pyx_newton;pyx_newton.newton(10.**100)'
10000 loops, best of 3: 21.7 usecper loop
$ python -m timeit -c 'import py_newton;py_newton.newton(10.**100)'
10000 loops, best of 3: 36.3 usec per loop	
Python版	
Cython版	
(Python3.3.1/Cython 0.19.1)
Cython化だけでは速くならない	
30
Pythonインタープ
リタは優秀	
p  バイトコードインタープリタ
のオーバヘッドは確かにあ
るが…	
Pythonオブジェク
トの、動的な比較・
演算APIが問題	
p  PyNumber_TrueDivide、
PyObject_RichCompare
など
p  CythonもPythonも、同じ
APIを使って演算を行うの
で、大きな差は出ない
Cのデータ型で演算を行う	
31
def	
  newton(double	
  n):	
  
	
  	
  cdef	
  double	
  guess,	
  better	
  
	
  
	
  	
  guess	
  =	
  n/2	
  
	
  	
  better	
  =	
  (guess	
  +	
  n/guess)/2	
  
	
  	
  while	
  better	
  !=	
  guess:	
  
	
  	
  	
  	
  guess	
  =	
  better	
  
	
  	
  	
  	
  better	
  =	
  (guess	
  +	
  n/guess)/2	
  
	
  	
  return	
  guess	
  
32
21.7 usec	
36.3 usec	
Python版	
Cython版	
Cython(型指定)版	
100000 loops, best of 3: 2.89 usec per loop	
•  Cython版では、0除算でZeroDivisionError例外を送出するなどの処
理があるため、Pure C版より若干遅い
関数の呼び出しコスト	
33
def	
  tak(x,	
  y,	
  z):	
  
	
  	
  	
  	
  if	
  x	
  <=	
  y:	
  
	
  	
  	
  	
  	
  	
  	
  	
  return	
  z	
  
	
  	
  	
  	
  return	
  tak(	
  
	
   tak(x-­‐1,	
  y,	
  z),	
  	
  
	
   tak(y-­‐1,	
  z,	
  x),	
  	
  
	
   tak(z-­‐1,	
  x,	
  y))	
  
34
Python版	
$ python -m timeit -s "import tak" "tak.tak(18, 9, 0)"
10 loops, best of 3: 2.74 sec per loop
Cython版	
$ python -m timeit -s "import tak" "tak.tak(18, 9, 0)"
10 loops, best of 3: 1.47 sec per loop
処理時間はほとんど関数呼び出し	
35
Pythonの関数オブ
ジェクトは重たい	
p 引数の動的な受け渡し
p フレームオブジェクトの作成
Cの関数を定義	
36
cdef	
  int	
  c_tak(int	
  x,	
  int	
  y,	
  int	
  z):	
  
	
  	
  	
  	
  if	
  x	
  <=	
  y:	
  
	
  	
  	
  	
  	
  	
  	
  	
  return	
  z	
  
	
  	
  	
  	
  return	
  c_tak(	
  
	
   c_tak(x-­‐1,	
  y,	
  z),	
  	
  
	
   c_tak(y-­‐1,	
  z,	
  x),	
  	
  
	
   c_tak(z-­‐1,	
  x,	
  y))	
  
	
  
def	
  tak(x,	
  y,	
  z):	
  
	
  	
  	
  	
  return	
  c_tak(x,	
  y,	
  z)	
  
37
Python版	
$ python -m timeit -s "import tak" "tak.tak(18, 9, 0)"
10 loops, best of 3: 2.74 sec per loop
Cython版	
$ python -m timeit -s "import tak" "tak.tak(18, 9, 0)"
10 loops, best of 3: 1.47 sec per loop
Cython(cdef)版	
$ python -m timeit -s "import tak" "tak.tak(18, 9, 0)"
10 loops, best of 3: 36.9 msec per loop
C言語の関数	
38
できるだけC/C++の
関数を呼び出す	
p 呼び出しコスト:低
p インライン化も可能
p Pythonからは呼び出せない
ご清聴ありがとうございました	
39

Contenu connexe

Tendances

Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料
Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料
Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料Yusuke Uchida
 
トピックモデルの評価指標 Perplexity とは何なのか?
トピックモデルの評価指標 Perplexity とは何なのか?トピックモデルの評価指標 Perplexity とは何なのか?
トピックモデルの評価指標 Perplexity とは何なのか?hoxo_m
 
ベイズ最適化
ベイズ最適化ベイズ最適化
ベイズ最適化MatsuiRyo
 
最適化超入門
最適化超入門最適化超入門
最適化超入門Takami Sato
 
ChatGPT 人間のフィードバックから強化学習した対話AI
ChatGPT 人間のフィードバックから強化学習した対話AIChatGPT 人間のフィードバックから強化学習した対話AI
ChatGPT 人間のフィードバックから強化学習した対話AIShota Imai
 
平面グラフと交通ネットワークのアルゴリズム
平面グラフと交通ネットワークのアルゴリズム平面グラフと交通ネットワークのアルゴリズム
平面グラフと交通ネットワークのアルゴリズムTakuya Akiba
 
GiNZAで始める日本語依存構造解析 〜CaboCha, UDPipe, Stanford NLPとの比較〜
GiNZAで始める日本語依存構造解析 〜CaboCha, UDPipe, Stanford NLPとの比較〜GiNZAで始める日本語依存構造解析 〜CaboCha, UDPipe, Stanford NLPとの比較〜
GiNZAで始める日本語依存構造解析 〜CaboCha, UDPipe, Stanford NLPとの比較〜Megagon Labs
 
サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23
サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23
サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23Masashi Shibata
 
Python 3のWebシステムでDDDに入門してみた
Python 3のWebシステムでDDDに入門してみたPython 3のWebシステムでDDDに入門してみた
Python 3のWebシステムでDDDに入門してみたHiromu Yakura
 
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Masahito Zembutsu
 
情報統計力学のすすめ
情報統計力学のすすめ情報統計力学のすすめ
情報統計力学のすすめNaoki Hayashi
 
NumPyが物足りない人へのCython入門
NumPyが物足りない人へのCython入門NumPyが物足りない人へのCython入門
NumPyが物足りない人へのCython入門Shiqiao Du
 
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門masayoshi takahashi
 
Sliced Wasserstein距離と生成モデル
Sliced Wasserstein距離と生成モデルSliced Wasserstein距離と生成モデル
Sliced Wasserstein距離と生成モデルohken
 
DSIRNLP#1 ランキング学習ことはじめ
DSIRNLP#1 ランキング学習ことはじめDSIRNLP#1 ランキング学習ことはじめ
DSIRNLP#1 ランキング学習ことはじめsleepy_yoshi
 
Newman アルゴリズムによるソーシャルグラフのクラスタリング
Newman アルゴリズムによるソーシャルグラフのクラスタリングNewman アルゴリズムによるソーシャルグラフのクラスタリング
Newman アルゴリズムによるソーシャルグラフのクラスタリングAtsushi KOMIYA
 
Transformer 動向調査 in 画像認識(修正版)
Transformer 動向調査 in 画像認識(修正版)Transformer 動向調査 in 画像認識(修正版)
Transformer 動向調査 in 画像認識(修正版)Kazuki Maeno
 
機械学習と深層学習の数理
機械学習と深層学習の数理機械学習と深層学習の数理
機械学習と深層学習の数理Ryo Nakamura
 
SSII2021 [OS2-01] 転移学習の基礎:異なるタスクの知識を利用するための機械学習の方法
SSII2021 [OS2-01] 転移学習の基礎:異なるタスクの知識を利用するための機械学習の方法SSII2021 [OS2-01] 転移学習の基礎:異なるタスクの知識を利用するための機械学習の方法
SSII2021 [OS2-01] 転移学習の基礎:異なるタスクの知識を利用するための機械学習の方法SSII
 

Tendances (20)

Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料
Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料
Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料
 
トピックモデルの評価指標 Perplexity とは何なのか?
トピックモデルの評価指標 Perplexity とは何なのか?トピックモデルの評価指標 Perplexity とは何なのか?
トピックモデルの評価指標 Perplexity とは何なのか?
 
ベイズ最適化
ベイズ最適化ベイズ最適化
ベイズ最適化
 
最適化超入門
最適化超入門最適化超入門
最適化超入門
 
ChatGPT 人間のフィードバックから強化学習した対話AI
ChatGPT 人間のフィードバックから強化学習した対話AIChatGPT 人間のフィードバックから強化学習した対話AI
ChatGPT 人間のフィードバックから強化学習した対話AI
 
平面グラフと交通ネットワークのアルゴリズム
平面グラフと交通ネットワークのアルゴリズム平面グラフと交通ネットワークのアルゴリズム
平面グラフと交通ネットワークのアルゴリズム
 
GiNZAで始める日本語依存構造解析 〜CaboCha, UDPipe, Stanford NLPとの比較〜
GiNZAで始める日本語依存構造解析 〜CaboCha, UDPipe, Stanford NLPとの比較〜GiNZAで始める日本語依存構造解析 〜CaboCha, UDPipe, Stanford NLPとの比較〜
GiNZAで始める日本語依存構造解析 〜CaboCha, UDPipe, Stanford NLPとの比較〜
 
サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23
サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23
サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23
 
Python 3のWebシステムでDDDに入門してみた
Python 3のWebシステムでDDDに入門してみたPython 3のWebシステムでDDDに入門してみた
Python 3のWebシステムでDDDに入門してみた
 
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編
 
FOBOS
FOBOSFOBOS
FOBOS
 
情報統計力学のすすめ
情報統計力学のすすめ情報統計力学のすすめ
情報統計力学のすすめ
 
NumPyが物足りない人へのCython入門
NumPyが物足りない人へのCython入門NumPyが物足りない人へのCython入門
NumPyが物足りない人へのCython入門
 
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門
 
Sliced Wasserstein距離と生成モデル
Sliced Wasserstein距離と生成モデルSliced Wasserstein距離と生成モデル
Sliced Wasserstein距離と生成モデル
 
DSIRNLP#1 ランキング学習ことはじめ
DSIRNLP#1 ランキング学習ことはじめDSIRNLP#1 ランキング学習ことはじめ
DSIRNLP#1 ランキング学習ことはじめ
 
Newman アルゴリズムによるソーシャルグラフのクラスタリング
Newman アルゴリズムによるソーシャルグラフのクラスタリングNewman アルゴリズムによるソーシャルグラフのクラスタリング
Newman アルゴリズムによるソーシャルグラフのクラスタリング
 
Transformer 動向調査 in 画像認識(修正版)
Transformer 動向調査 in 画像認識(修正版)Transformer 動向調査 in 画像認識(修正版)
Transformer 動向調査 in 画像認識(修正版)
 
機械学習と深層学習の数理
機械学習と深層学習の数理機械学習と深層学習の数理
機械学習と深層学習の数理
 
SSII2021 [OS2-01] 転移学習の基礎:異なるタスクの知識を利用するための機械学習の方法
SSII2021 [OS2-01] 転移学習の基礎:異なるタスクの知識を利用するための機械学習の方法SSII2021 [OS2-01] 転移学習の基礎:異なるタスクの知識を利用するための機械学習の方法
SSII2021 [OS2-01] 転移学習の基礎:異なるタスクの知識を利用するための機械学習の方法
 

En vedette

なぜ科学計算にはPythonか?
なぜ科学計算にはPythonか?なぜ科学計算にはPythonか?
なぜ科学計算にはPythonか?Aki Ariga
 
Cython ことはじめ
Cython ことはじめCython ことはじめ
Cython ことはじめgion_XY
 
白い陽気なやつとPythonでたわむれる
白い陽気なやつとPythonでたわむれる白い陽気なやつとPythonでたわむれる
白い陽気なやつとPythonでたわむれるKen'ichi Matsui
 
SIerからWebエンジニアへの失敗しない転職方法
SIerからWebエンジニアへの失敗しない転職方法SIerからWebエンジニアへの失敗しない転職方法
SIerからWebエンジニアへの失敗しない転職方法Yusuke Kon
 
深層学習フレームワーク Chainer の開発と今後の展開
深層学習フレームワーク Chainer の開発と今後の展開深層学習フレームワーク Chainer の開発と今後の展開
深層学習フレームワーク Chainer の開発と今後の展開Seiya Tokui
 
Python 機械学習プログラミング データ分析ライブラリー解説編
Python 機械学習プログラミング データ分析ライブラリー解説編Python 機械学習プログラミング データ分析ライブラリー解説編
Python 機械学習プログラミング データ分析ライブラリー解説編Etsuji Nakai
 
High performance python computing for data science
High performance python computing for data scienceHigh performance python computing for data science
High performance python computing for data scienceTakami Sato
 
RubyエンジニアがPythonをdisるためにPythonを勉強してみた
RubyエンジニアがPythonをdisるためにPythonを勉強してみたRubyエンジニアがPythonをdisるためにPythonを勉強してみた
RubyエンジニアがPythonをdisるためにPythonを勉強してみたYusuke Kon
 
[AWSマイスターシリーズ] AWS CLI / AWS Tools for Windows PowerShell
[AWSマイスターシリーズ] AWS CLI / AWS Tools for Windows PowerShell[AWSマイスターシリーズ] AWS CLI / AWS Tools for Windows PowerShell
[AWSマイスターシリーズ] AWS CLI / AWS Tools for Windows PowerShellAmazon Web Services Japan
 
Pythonによる機械学習の最前線
Pythonによる機械学習の最前線Pythonによる機械学習の最前線
Pythonによる機械学習の最前線Kimikazu Kato
 
「はじめてでもわかる RandomForest 入門-集団学習による分類・予測 -」 -第7回データマイニング+WEB勉強会@東京
「はじめてでもわかる RandomForest 入門-集団学習による分類・予測 -」 -第7回データマイニング+WEB勉強会@東京「はじめてでもわかる RandomForest 入門-集団学習による分類・予測 -」 -第7回データマイニング+WEB勉強会@東京
「はじめてでもわかる RandomForest 入門-集団学習による分類・予測 -」 -第7回データマイニング+WEB勉強会@東京Koichi Hamada
 

En vedette (14)

なぜ科学計算にはPythonか?
なぜ科学計算にはPythonか?なぜ科学計算にはPythonか?
なぜ科学計算にはPythonか?
 
Cython ことはじめ
Cython ことはじめCython ことはじめ
Cython ことはじめ
 
Random Forests
Random ForestsRandom Forests
Random Forests
 
白い陽気なやつとPythonでたわむれる
白い陽気なやつとPythonでたわむれる白い陽気なやつとPythonでたわむれる
白い陽気なやつとPythonでたわむれる
 
NumPy闇入門
NumPy闇入門NumPy闇入門
NumPy闇入門
 
SIerからWebエンジニアへの失敗しない転職方法
SIerからWebエンジニアへの失敗しない転職方法SIerからWebエンジニアへの失敗しない転職方法
SIerからWebエンジニアへの失敗しない転職方法
 
CuPy解説
CuPy解説CuPy解説
CuPy解説
 
深層学習フレームワーク Chainer の開発と今後の展開
深層学習フレームワーク Chainer の開発と今後の展開深層学習フレームワーク Chainer の開発と今後の展開
深層学習フレームワーク Chainer の開発と今後の展開
 
Python 機械学習プログラミング データ分析ライブラリー解説編
Python 機械学習プログラミング データ分析ライブラリー解説編Python 機械学習プログラミング データ分析ライブラリー解説編
Python 機械学習プログラミング データ分析ライブラリー解説編
 
High performance python computing for data science
High performance python computing for data scienceHigh performance python computing for data science
High performance python computing for data science
 
RubyエンジニアがPythonをdisるためにPythonを勉強してみた
RubyエンジニアがPythonをdisるためにPythonを勉強してみたRubyエンジニアがPythonをdisるためにPythonを勉強してみた
RubyエンジニアがPythonをdisるためにPythonを勉強してみた
 
[AWSマイスターシリーズ] AWS CLI / AWS Tools for Windows PowerShell
[AWSマイスターシリーズ] AWS CLI / AWS Tools for Windows PowerShell[AWSマイスターシリーズ] AWS CLI / AWS Tools for Windows PowerShell
[AWSマイスターシリーズ] AWS CLI / AWS Tools for Windows PowerShell
 
Pythonによる機械学習の最前線
Pythonによる機械学習の最前線Pythonによる機械学習の最前線
Pythonによる機械学習の最前線
 
「はじめてでもわかる RandomForest 入門-集団学習による分類・予測 -」 -第7回データマイニング+WEB勉強会@東京
「はじめてでもわかる RandomForest 入門-集団学習による分類・予測 -」 -第7回データマイニング+WEB勉強会@東京「はじめてでもわかる RandomForest 入門-集団学習による分類・予測 -」 -第7回データマイニング+WEB勉強会@東京
「はじめてでもわかる RandomForest 入門-集団学習による分類・予測 -」 -第7回データマイニング+WEB勉強会@東京
 

Similaire à Introduction to cython

Wrapping a C++ library with Cython
Wrapping a C++ library with CythonWrapping a C++ library with Cython
Wrapping a C++ library with Cythonfuzzysphere
 
Cython intro prelerease
Cython intro prelereaseCython intro prelerease
Cython intro prelereaseShiqiao Du
 
cocos2d-xとネイティブ間の連携
cocos2d-xとネイティブ間の連携cocos2d-xとネイティブ間の連携
cocos2d-xとネイティブ間の連携Tomoaki Shimizu
 
Python physicalcomputing
Python physicalcomputingPython physicalcomputing
Python physicalcomputingNoboru Irieda
 
T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門伸男 伊藤
 
cocos2d-x公開講座 in 鹿児島
cocos2d-x公開講座 in 鹿児島cocos2d-x公開講座 in 鹿児島
cocos2d-x公開講座 in 鹿児島Tomoaki Shimizu
 
Python Kyoto study
Python Kyoto studyPython Kyoto study
Python Kyoto studyNaoya Inada
 
ひのきのぼうだけで全クリ目指す
ひのきのぼうだけで全クリ目指すひのきのぼうだけで全クリ目指す
ひのきのぼうだけで全クリ目指すAromaBlack
 
Cocos2d xをさらにさわってみよう!
Cocos2d xをさらにさわってみよう!Cocos2d xをさらにさわってみよう!
Cocos2d xをさらにさわってみよう!Tomoaki Shimizu
 
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12Takanori Suzuki
 
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.kiki utagawa
 
研究生のためのC++ no.2
研究生のためのC++ no.2研究生のためのC++ no.2
研究生のためのC++ no.2Tomohiro Namba
 
Sohu邮箱的python经验
Sohu邮箱的python经验Sohu邮箱的python经验
Sohu邮箱的python经验Ryan Poy
 

Similaire à Introduction to cython (20)

Wrapping a C++ library with Cython
Wrapping a C++ library with CythonWrapping a C++ library with Cython
Wrapping a C++ library with Cython
 
Cython intro prelerease
Cython intro prelereaseCython intro prelerease
Cython intro prelerease
 
cocos2d-xとネイティブ間の連携
cocos2d-xとネイティブ間の連携cocos2d-xとネイティブ間の連携
cocos2d-xとネイティブ間の連携
 
Python physicalcomputing
Python physicalcomputingPython physicalcomputing
Python physicalcomputing
 
Introduction of Python
Introduction of PythonIntroduction of Python
Introduction of Python
 
T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門
 
cocos2d-x公開講座 in 鹿児島
cocos2d-x公開講座 in 鹿児島cocos2d-x公開講座 in 鹿児島
cocos2d-x公開講座 in 鹿児島
 
PCL
PCLPCL
PCL
 
Python Kyoto study
Python Kyoto studyPython Kyoto study
Python Kyoto study
 
Boost Tour 1.50.0 All
Boost Tour 1.50.0 AllBoost Tour 1.50.0 All
Boost Tour 1.50.0 All
 
ひのきのぼうだけで全クリ目指す
ひのきのぼうだけで全クリ目指すひのきのぼうだけで全クリ目指す
ひのきのぼうだけで全クリ目指す
 
Cocos2d xをさらにさわってみよう!
Cocos2d xをさらにさわってみよう!Cocos2d xをさらにさわってみよう!
Cocos2d xをさらにさわってみよう!
 
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
 
Prosym2012
Prosym2012Prosym2012
Prosym2012
 
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
 
Boost tour 1_40_0
Boost tour 1_40_0Boost tour 1_40_0
Boost tour 1_40_0
 
C++14 Overview
C++14 OverviewC++14 Overview
C++14 Overview
 
研究生のためのC++ no.2
研究生のためのC++ no.2研究生のためのC++ no.2
研究生のためのC++ no.2
 
Sohu邮箱的python经验
Sohu邮箱的python经验Sohu邮箱的python经验
Sohu邮箱的python经验
 
Boost Tour 1_58_0 merge
Boost Tour 1_58_0 mergeBoost Tour 1_58_0 merge
Boost Tour 1_58_0 merge
 

Plus de Atsuo Ishimoto

NumPyの歴史とPythonの並行処理【PyData.tokyo One-day Conference 2018】
NumPyの歴史とPythonの並行処理【PyData.tokyo One-day Conference 2018】NumPyの歴史とPythonの並行処理【PyData.tokyo One-day Conference 2018】
NumPyの歴史とPythonの並行処理【PyData.tokyo One-day Conference 2018】Atsuo Ishimoto
 
行列演算とPythonの言語デザイン
行列演算とPythonの言語デザイン行列演算とPythonの言語デザイン
行列演算とPythonの言語デザインAtsuo Ishimoto
 
Python 3.6 リリースパーティー 発表資料
Python 3.6 リリースパーティー 発表資料Python 3.6 リリースパーティー 発表資料
Python 3.6 リリースパーティー 発表資料Atsuo Ishimoto
 
tse - Pythonによるテキスト整形ユーティリティ
tse - Pythonによるテキスト整形ユーティリティtse - Pythonによるテキスト整形ユーティリティ
tse - Pythonによるテキスト整形ユーティリティAtsuo Ishimoto
 
Pelicanによる www.python.jpの構築
Pelicanによる www.python.jpの構築Pelicanによる www.python.jpの構築
Pelicanによる www.python.jpの構築Atsuo Ishimoto
 
PyCon JP 2012 hands-on セッション/ FlaskによるWebアプリケーションの実装とプログラミングツール
PyCon JP 2012 hands-on セッション/ FlaskによるWebアプリケーションの実装とプログラミングツールPyCon JP 2012 hands-on セッション/ FlaskによるWebアプリケーションの実装とプログラミングツール
PyCon JP 2012 hands-on セッション/ FlaskによるWebアプリケーションの実装とプログラミングツールAtsuo Ishimoto
 
Python3と向かい合ってみる
Python3と向かい合ってみるPython3と向かい合ってみる
Python3と向かい合ってみるAtsuo Ishimoto
 
Pythonのシグナル処理
Pythonのシグナル処理Pythonのシグナル処理
Pythonのシグナル処理Atsuo Ishimoto
 
Pythonのガベージコレクション
PythonのガベージコレクションPythonのガベージコレクション
PythonのガベージコレクションAtsuo Ishimoto
 
Slide at PyCon mini JP on 2011/1/29
Slide at PyCon mini JP on 2011/1/29Slide at PyCon mini JP on 2011/1/29
Slide at PyCon mini JP on 2011/1/29Atsuo Ishimoto
 
String representation in py3k
String representation in py3kString representation in py3k
String representation in py3kAtsuo Ishimoto
 

Plus de Atsuo Ishimoto (14)

Pythonの紹介
Pythonの紹介Pythonの紹介
Pythonの紹介
 
NumPyの歴史とPythonの並行処理【PyData.tokyo One-day Conference 2018】
NumPyの歴史とPythonの並行処理【PyData.tokyo One-day Conference 2018】NumPyの歴史とPythonの並行処理【PyData.tokyo One-day Conference 2018】
NumPyの歴史とPythonの並行処理【PyData.tokyo One-day Conference 2018】
 
行列演算とPythonの言語デザイン
行列演算とPythonの言語デザイン行列演算とPythonの言語デザイン
行列演算とPythonの言語デザイン
 
Django pgroonga
Django pgroongaDjango pgroonga
Django pgroonga
 
Python 3.6 リリースパーティー 発表資料
Python 3.6 リリースパーティー 発表資料Python 3.6 リリースパーティー 発表資料
Python 3.6 リリースパーティー 発表資料
 
tse - Pythonによるテキスト整形ユーティリティ
tse - Pythonによるテキスト整形ユーティリティtse - Pythonによるテキスト整形ユーティリティ
tse - Pythonによるテキスト整形ユーティリティ
 
python.jpの使い方
python.jpの使い方python.jpの使い方
python.jpの使い方
 
Pelicanによる www.python.jpの構築
Pelicanによる www.python.jpの構築Pelicanによる www.python.jpの構築
Pelicanによる www.python.jpの構築
 
PyCon JP 2012 hands-on セッション/ FlaskによるWebアプリケーションの実装とプログラミングツール
PyCon JP 2012 hands-on セッション/ FlaskによるWebアプリケーションの実装とプログラミングツールPyCon JP 2012 hands-on セッション/ FlaskによるWebアプリケーションの実装とプログラミングツール
PyCon JP 2012 hands-on セッション/ FlaskによるWebアプリケーションの実装とプログラミングツール
 
Python3と向かい合ってみる
Python3と向かい合ってみるPython3と向かい合ってみる
Python3と向かい合ってみる
 
Pythonのシグナル処理
Pythonのシグナル処理Pythonのシグナル処理
Pythonのシグナル処理
 
Pythonのガベージコレクション
PythonのガベージコレクションPythonのガベージコレクション
Pythonのガベージコレクション
 
Slide at PyCon mini JP on 2011/1/29
Slide at PyCon mini JP on 2011/1/29Slide at PyCon mini JP on 2011/1/29
Slide at PyCon mini JP on 2011/1/29
 
String representation in py3k
String representation in py3kString representation in py3k
String representation in py3k
 

Introduction to cython