静かなる名辞

pythonとプログラミングのこと



速度計測シリーズ

【python】ctypesでバイト列や文字列を受け渡しする

はじめに pythonではC言語の動的リンク/共有ライブラリを手軽に扱う方法として、ctypesという標準モジュールが用意されています。16.16. ctypes — Pythonのための外部関数ライブラリ — Python 3.6.5 ドキュメント ctypesを用いて自作したC言語の処理を呼び出…

【python】GridSearchCV『の』パラメータ・チューニング

はじめに 機械学習でパラメータ・チューニングをしたい場合、グリッドサーチを行うのが定石とされています。sklearnではグリッドサーチはGridSearchCVで行うことができます。sklearn.model_selection.GridSearchCV — scikit-learn 0.20.0 documentation それ…

【python】反転させて先頭n個取るスライス

タイトルの通りのものが必要になりました。一体どう書くのでしょう? とりあえず反転させる >>> lst = list(range(20)) >>> lst[::-1] [19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0] ま、これは常識(python廃人の皆さんには)。…

【python】べき乗とべき根の計算

べき乗は、べき根はです。2乗とかsqrtくらいはわかっても、n乗根あたりになるとすぐ出てこないという人も多いのでは? 目次 組み込み関数powを使う方法 べき乗演算子を使う方法 numpyに頼る方法 n乗根について どれが速いの? まとめ スポンサーリンク (adsb…

【python】operator.itemgetterを使うべきか否か問題

はじめに この記事を開いた人の大半は「itemgetter? なにそれ」という反応でしょう。 (いや、検索で来た人はそうでもないかもしれないけど) itemgetterは以下のように使えるものです。 >>> lst = list(zip([1,3,5,6,7,1,4], [3,4,1,0,8,5,2])) # 特に値に…

【python】np.matrixの速度を測る

numpyで行列演算を行う方法としては、普通のnumpy配列に行列演算系の関数を適用していく方法と、あまり知られていないがnp.matrix型やnp.mat型を使う方法がある。 速度が違ったりするのだろうか? 仮に違うと困る(というか場面によって適切な方を選ぶ必要が…

【python】bitのリストを高速にintに変換する

やりたいこと input:[0,1,0,0] output:4 極めて単純明快ですが、やるだけなら簡単なので速度を測ります。さらに、pure pythonでやると遅いことが目に見えているのでcythonで高速にしようというネタです。 pure pythonで書いたプログラム 素晴らしいことに(…

【python】数字を1桁ずつに分解

こういう処理がしたいときがある。 i = 2049 lst = [] while i > 0: lst.append(i%10) i //= 10 # 必須 lst.reverse() print(lst) # 結果-> [2, 0, 4, 9] 「もうできたじゃん」という意見もあると思うが、C言語のコードみたいでいかにもpythonicじゃない。 …

【python】in演算子は遅いのか?

記事の概要 素朴な疑問:「in演算子は遅いのか?」 速度を実測して検証しました。 目次 記事の概要 はじめに 検証 結果 結論 はじめに inの速度は謎である。とりあえず、なんとなく速くはないイメージはあるといえばあるので、ループの中でinを書くとちょっ…

【python】SelectKBestのscore_funcによる速度差を比較

SelectKBestはsklearnの簡単に特徴選択ができるクラスです。ざっくりと特徴選択したいときに、とても便利です。sklearn.feature_selection.SelectKBest — scikit-learn 0.19.1 documentation ところで、このSelectKBestにはscore_funcというパラメータを指定…

【python】collections.ChainMapの使い方を理解する

conclusion 記事本文でだらだらと説明していますが、要約すると、 複数の辞書を一つにまとめる方法 元辞書への参照を張ってごにょごにょするだけなので、新しい辞書を作るより(ケースバイケースだが)速い 当然元辞書を変更すると反映されてしまう これだけ…

【python】sklearnのPCAでsvd_solverによる速度差を比較

sklearnのPCA(主成分分析)がやたら遅くて腹が立ちました。計算コストを下げるために次元削減してるのに、次元削減で計算コスト食ったら意味がありません。 とにかくこのPCAを高速化したかったので、svd_solverを変えてどうなるか試しました。なお、腹が立…

【python】pickleの速度を見る

pickleが遅くて困った経験、ありませんか? 私はありませんが、実際問題としてpickleの速度ってちょっと気になりますよね。 という訳で、測ってみました。 # coding: UTF-8 import sys import pickle import time import numpy as np for obj_size in [10,50…

【python】numpyの型の違いによる計算速度差を見てみる

前回の記事で「なんとなくnp.float32が速い気がする」とか書いたので、実際に測ってみる。 予め断っておくと、計算速度なんて環境によって違うし、どの型が速いかもCPUのアーキテクチャに依存する。numpyはバリバリにSIMD命令を使って最適化する(と、思う)…