タグ

Performanceとpythonに関するriyokotterのブックマーク (7)

  • Pythonを高速にするTips集

    この記事は,Pythonを少しでも高速に実行するための方法をまとめたTips集です. 随時更新予定です. グローバル名前空間で大きな処理を書かない Pythonではメソッド内に処理を書かずにグローバル名前空間に処理を書くこともできます。 Pythonは変数アクセスを名前空間ごとの辞書(ハッシュマップみたいなもの)で検索することで実現しています。 グローバル名前空間の辞書にはデフォルトの状態でいくつかの要素が追加されているので、メソッド内でローカル変数にアクセスする場合に比べて変数アクセスのコストが重くなります。 なので、グローバル名前空間でforループなどを回すと変数アクセスのコストが無視できなくなるので、forループを回すなどの大きな処理を行う場合はメソッド内に処理を書くようにしましょう。 グローバル名前空間にforループの処理をべた書きした場合と、メソッド内に同じ処理を書いた場合での実

  • PythonでCSVを高速&省メモリに読みたい - tkm2261's blog

    今日はPython (Pandas)で高速にCSVを読むことに挑戦したいと思います。 Kaggleに参加するたびに、イライラしていたので各実装の白黒はっきりさせようと思います。 R使いが羨ましいなぁと思う第一位がCSV読込が簡単に並列出来て速いことなので、 なんとかGILのあるPythonでも高速に読み込みたいと思います。 ただ、この検証ではコーディング量が多いものは検証しません。 CSV読込は頻出するので、フットワークの軽さが重要です。(オレオレライブラリ嫌い) Pickleは早いけど。。。 結論はDask使おう! 検証環境 データ 速度検証 pandas.read_csv() pandas.read_csv() (dtype指定) pandas.read_csv() (gzip圧縮) numpy.genfromtxt() pandas.read_csv() (chunksize指定 +

    PythonでCSVを高速&省メモリに読みたい - tkm2261's blog
  • 高速化のためのPython Tips - のんびりしているエンジニアの日記

    皆さんこんにちは お元気ですか?私は元気です。 Pythonにおける高速化手法を掲載してみます。 簡単なコード並びに索引のような感じで引けるようなイメージで作成しました。 日の目次です。 Pythonにおける高速化の必要性 Pythonの高速化 高速化の手順 Profiling的な条件 計測コード Pythonの基的な書き方部分 rangeよりxrangeを(Python2.7) リストの生成 文字列結合 Import文のコスト 関数呼び出しのコスト ドットを避ける yieldを使う Numpyに関するTips Numpyを使用して基演算を高速化する Numpyの要素にアクセスする演算をしない Numbaで手早く高速化 その他高速化ツール Cython Dask PyPy 感想並びに展望 参考文献 Pythonにおける高速化の必要性 PythonC++Javaと比較すると非

    高速化のためのPython Tips - のんびりしているエンジニアの日記
  • 機械学習アルゴリズムのボトルネックをCythonで改善する話 - Qiita

    この記事について Pythonを速くする方法について語ります プロファイリングによってCPUバウンドな処理のボトルネックを見つけます 見つけたボトルネックをCythonで改善します はじめに 先日Bayesian Personalized Ranking (BPR)というレコメンドアルゴリズムを実装しました。 こちらの論文の式を参考にコードを書いてみたのですが、実行してみたらちょっと遅すぎて使えなかったため、処理速度の改善に取り組みました。 その時に試したことを備忘録的にまとめます。 この記事で用いる手法とコード BPRはユーザ x アイテムの行列の行列分解を与えます。 ユーザ x アイテムの行列$X$を、ユーザ x ファクターの行列$U$とアイテム x ファクターの行列$V$に分解します。 この問題をどのように解くかはBPRの元論文をご覧ください。 この手法を以下のように実装しました。$

    機械学習アルゴリズムのボトルネックをCythonで改善する話 - Qiita
  • Pythonにおけるプロファイリング ― コードの高速化のために | POSTD

    ここHumanGeo社ではPythonを使うことが多く、それは極上の楽しみでもあります。美しく機能的なコードを短時間で記述するのにPythonはうってつけで、私個人にとっても一押しの言語です。仕事に限らずプライベートでも使っています。そんな素晴らしいPythonですが、欠点がないわけではありません。それはあまりにも遅いことです。幸いPythonには、コードをプロファイリングするための優れたツールがいくつかあるので、コードの美しさと速さを共存させることができます。 HumanGeoで働き出した頃、実行に長時間を要すプログラムのボトルネックを探り、何とかしてそれを速くさせるという仕事を担当しました。その内容は、 cProfile や PyCallGraph ( ソース )、はたまたPyPy(高速なPython用代替インタプリタ)などの各種ツールを使って、プログラムを最適化するためのベストな方法

    Pythonにおけるプロファイリング ― コードの高速化のために | POSTD
  • Python Async (ASGI) Web Frameworks Benchmark

    This is a simple benchmark for python async frameworks. Almost all of the frameworks are ASGI-compatible (aiohttp and tornado are exceptions on the moment). The objective of the benchmark is not testing deployment (like uvicorn vs hypercorn and etc) or database (ORM, drivers) but instead test the frameworks itself. The benchmark checks request parsing (body, headers, formdata, queries), routing, r

  • あなたのPythonを爆速にする7つの方法

    最近プロコン(プログラミング・コンテスト)をはじめました。 基的にはアルゴリズム勝負なのですが、とにかく速度を競うプロコンです。 小手先の速度チューニングもバカにできません。 何が速くて何が遅いのかはっきりさせるため、ボトルネックになりそうな操作のベンチマークを取りました。 実行環境は下記のとおりです。 python2.7.5 OS: MacOSX 11 CPU: Core i7 2GHz (4core) MEM: 16GB その1. 配列の初期化を高速化する まずはプロコンの基中の基、配列の初期化です。 下記7つの初期化方法を比較してみます。 空配列へappendして配列をつくる for内包表記で配列をつくる サイズ1(None)の配列を乗算してから値を代入する サイズ1(None)の配列を乗算する サイズ1(ゼロ)の配列を乗算する すべてゼロのarrayをつくる 0〜nのarra

  • 1