SlideShare a Scribd company logo
1 of 39
Download to read offline
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

More Related Content

What's hot

不遇の標準ライブラリ - valarray
不遇の標準ライブラリ - valarray不遇の標準ライブラリ - valarray
不遇の標準ライブラリ - valarrayRyosuke839
 
ELFの動的リンク
ELFの動的リンクELFの動的リンク
ELFの動的リンク7shi
 
画像処理AIを用いた異常検知
画像処理AIを用いた異常検知画像処理AIを用いた異常検知
画像処理AIを用いた異常検知Hideo Terada
 
3次元レジストレーション(PCLデモとコード付き)
3次元レジストレーション(PCLデモとコード付き)3次元レジストレーション(PCLデモとコード付き)
3次元レジストレーション(PCLデモとコード付き)Toru Tamaki
 
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないこと画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないことNorishige Fukushima
 
[DL輪読会]“Spatial Attention Point Network for Deep-learning-based Robust Autono...
[DL輪読会]“Spatial Attention Point Network for Deep-learning-based Robust Autono...[DL輪読会]“Spatial Attention Point Network for Deep-learning-based Robust Autono...
[DL輪読会]“Spatial Attention Point Network for Deep-learning-based Robust Autono...Deep Learning JP
 
【DL輪読会】How Much Can CLIP Benefit Vision-and-Language Tasks?
【DL輪読会】How Much Can CLIP Benefit Vision-and-Language Tasks? 【DL輪読会】How Much Can CLIP Benefit Vision-and-Language Tasks?
【DL輪読会】How Much Can CLIP Benefit Vision-and-Language Tasks? Deep Learning JP
 
katagaitai CTF勉強会 #5 Crypto
katagaitai CTF勉強会 #5 Cryptokatagaitai CTF勉強会 #5 Crypto
katagaitai CTF勉強会 #5 Cryptotrmr
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門大樹 小倉
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門Norishige Fukushima
 
【メタサーベイ】数式ドリブン教師あり学習
【メタサーベイ】数式ドリブン教師あり学習【メタサーベイ】数式ドリブン教師あり学習
【メタサーベイ】数式ドリブン教師あり学習cvpaper. challenge
 
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだconstexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだGenya Murakami
 
[DL輪読会]AdaShare: Learning What To Share For Efficient Deep Multi-Task Learning
[DL輪読会]AdaShare: Learning What To Share For Efficient Deep Multi-Task Learning[DL輪読会]AdaShare: Learning What To Share For Efficient Deep Multi-Task Learning
[DL輪読会]AdaShare: Learning What To Share For Efficient Deep Multi-Task LearningDeep Learning JP
 
三次元点群処理ライブラリPCLと 統合ロボットシステム研究での 利用例の紹介
三次元点群処理ライブラリPCLと 統合ロボットシステム研究での 利用例の紹介三次元点群処理ライブラリPCLと 統合ロボットシステム研究での 利用例の紹介
三次元点群処理ライブラリPCLと 統合ロボットシステム研究での 利用例の紹介Ryohei Ueda
 
ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門Fixstars Corporation
 
分散深層学習 @ NIPS'17
分散深層学習 @ NIPS'17分散深層学習 @ NIPS'17
分散深層学習 @ NIPS'17Takuya Akiba
 
【メタサーベイ】基盤モデル / Foundation Models
【メタサーベイ】基盤モデル / Foundation Models【メタサーベイ】基盤モデル / Foundation Models
【メタサーベイ】基盤モデル / Foundation Modelscvpaper. challenge
 

What's hot (20)

不遇の標準ライブラリ - valarray
不遇の標準ライブラリ - valarray不遇の標準ライブラリ - valarray
不遇の標準ライブラリ - valarray
 
ELFの動的リンク
ELFの動的リンクELFの動的リンク
ELFの動的リンク
 
画像処理AIを用いた異常検知
画像処理AIを用いた異常検知画像処理AIを用いた異常検知
画像処理AIを用いた異常検知
 
PCL
PCLPCL
PCL
 
3次元レジストレーション(PCLデモとコード付き)
3次元レジストレーション(PCLデモとコード付き)3次元レジストレーション(PCLデモとコード付き)
3次元レジストレーション(PCLデモとコード付き)
 
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないこと画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
 
[DL輪読会]“Spatial Attention Point Network for Deep-learning-based Robust Autono...
[DL輪読会]“Spatial Attention Point Network for Deep-learning-based Robust Autono...[DL輪読会]“Spatial Attention Point Network for Deep-learning-based Robust Autono...
[DL輪読会]“Spatial Attention Point Network for Deep-learning-based Robust Autono...
 
TVM の紹介
TVM の紹介TVM の紹介
TVM の紹介
 
【DL輪読会】How Much Can CLIP Benefit Vision-and-Language Tasks?
【DL輪読会】How Much Can CLIP Benefit Vision-and-Language Tasks? 【DL輪読会】How Much Can CLIP Benefit Vision-and-Language Tasks?
【DL輪読会】How Much Can CLIP Benefit Vision-and-Language Tasks?
 
katagaitai CTF勉強会 #5 Crypto
katagaitai CTF勉強会 #5 Cryptokatagaitai CTF勉強会 #5 Crypto
katagaitai CTF勉強会 #5 Crypto
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
 
【メタサーベイ】数式ドリブン教師あり学習
【メタサーベイ】数式ドリブン教師あり学習【メタサーベイ】数式ドリブン教師あり学習
【メタサーベイ】数式ドリブン教師あり学習
 
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだconstexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
 
[DL輪読会]AdaShare: Learning What To Share For Efficient Deep Multi-Task Learning
[DL輪読会]AdaShare: Learning What To Share For Efficient Deep Multi-Task Learning[DL輪読会]AdaShare: Learning What To Share For Efficient Deep Multi-Task Learning
[DL輪読会]AdaShare: Learning What To Share For Efficient Deep Multi-Task Learning
 
三次元点群処理ライブラリPCLと 統合ロボットシステム研究での 利用例の紹介
三次元点群処理ライブラリPCLと 統合ロボットシステム研究での 利用例の紹介三次元点群処理ライブラリPCLと 統合ロボットシステム研究での 利用例の紹介
三次元点群処理ライブラリPCLと 統合ロボットシステム研究での 利用例の紹介
 
ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門
 
分散深層学習 @ NIPS'17
分散深層学習 @ NIPS'17分散深層学習 @ NIPS'17
分散深層学習 @ NIPS'17
 
BERT入門
BERT入門BERT入門
BERT入門
 
【メタサーベイ】基盤モデル / Foundation Models
【メタサーベイ】基盤モデル / Foundation Models【メタサーベイ】基盤モデル / Foundation Models
【メタサーベイ】基盤モデル / Foundation Models
 

Viewers also liked

なぜ科学計算には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
 

Viewers also liked (13)

なぜ科学計算にはPythonか?
なぜ科学計算にはPythonか?なぜ科学計算にはPythonか?
なぜ科学計算にはPythonか?
 
Cython ことはじめ
Cython ことはじめCython ことはじめ
Cython ことはじめ
 
Random Forests
Random ForestsRandom Forests
Random Forests
 
白い陽気なやつとPythonでたわむれる
白い陽気なやつとPythonでたわむれる白い陽気なやつとPythonでたわむれる
白い陽気なやつとPythonでたわむれる
 
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勉強会@東京
 

Similar to 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
 
サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23
サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23
サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23Masashi Shibata
 
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
 

Similar to 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 鹿児島
 
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
 
ひのきのぼうだけで全クリ目指す
ひのきのぼうだけで全クリ目指すひのきのぼうだけで全クリ目指す
ひのきのぼうだけで全クリ目指す
 
サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23
サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23
サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23
 
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
 

More from 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
 

More from 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
 

Recently uploaded

20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directoryosamut
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 
プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価sugiuralab
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 
プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールプレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールsugiuralab
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 

Recently uploaded (7)

20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 
プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 
プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールプレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツール
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 

Introduction to cython