Lock in $30 Savings on PRO—Offer Ends Soon! ⏳

20230623_Cの知識ゼロでもCythonでサクッと高速化できる話

 20230623_Cの知識ゼロでもCythonでサクッと高速化できる話

2023-06-23の関西Kaggler会のLT資料

Avatar for Tomoki Kubota

Tomoki Kubota

June 23, 2023
Tweet

Other Decks in Programming

Transcript

  1. クボタです! 2 • 5月から株式会社ScaleDataのエンジニア ◦ AWS, Python, PowerBI, Snowflake に挑戦中

    ◦ 前職はSIerで基幹システム導入やデータ解析に従事 • 趣味:読書、マンガ、映画鑑賞、外食、クソリプ
  2. Cython って何? 5 - Cython は Python の一部 - 構文が

    Python に似ており Python のコードと一緒に記述できる - Cython のコードをコンパイルして効率的な C のコードを生成できる - 一般に CPU バウンドな処理は C が Python より高速なので高速化の手段として有用 - 静的型付け、関数呼び出しのオーバーヘッドの小ささ等が要因 - CPU バウンドではない処理は Cython による高速化の恩恵が薄いので注意 - C, C# の知識があれば深く使いこなせるがぶっちゃけそんなもん知らなくても使える The Cython language is a superset of the Python language that additionally supports calling C functions and declaring C types on variables and class attributes. This allows the compiler to generate very efficient C code from Cython code. (公式サイトより)
  3. Notebook に Cython を書く方法 簡単(主観) 1. %load_ext Cython で Cython

    extention をロード 2. Cython を書きたいセルの冒頭で %%cython して Cython のコードを書く cdef, cpdef で関数・クラス・クラスのメンバーを定義する(やり方は後述) 関数の返り値や引数、ローカル変数に静的に型を付ける(やり方は後述) 6
  4. 関数を cdef/cpdef どちらで定義するか cpdef: C/Python の両方から call できる cdef :Cython

    からのみ call できる 10 cdef 関数 Python から call したのでエラー cpdef 関数からならば cdef 関数を call 可
  5. Cython によるクラス定義 (1/2) - クラスは cdef class で宣言 - Attribute

    はメンバー定義の冒頭で cdef で宣言 - 宣言していない Attribute はセットできない - public がついていない Attribute はクラス外からアクセスできない - Method は cdef, cpdef, def を使い分けられる 11
  6. Cython によるクラス定義 (2/2) 12 x は public なのでアクセス可 y は

    public でないのでアクセス不可 cpdef で定義したメソッドは Python から call 可 cdef で定義したメソッドは Python から call 不可 def で定義したメソッドは Python から call 可 cpdef メソッド経由なら cdef メソッドに Python からアクセス可