python

Plotlyに関するメモ

最近グラフの可視化によく使っているPlotlyに関するちょっとしたメモです。 plotly.expressとplotly.graph_objects plotlyのスクリプト例を検索すると、 import plotly.express as px しているものと import plotly.graph_objects as go しているものの両方…

JPEGのEXIFに記録された撮影日時でファイル作成日時を更新するサンプルPythonスクリプト

Windowsにて表題のことをするPythonスクリプトを以下に示します。 os.utime()だとファイルの更新日時、アクセス日時を更新することはできるのですが、 ファイルの作成日時は変更できないところで少し調査が必要でした。 【Python】ファイルとフォルダのタイ…

NumPyでランダム画像を生成

いつも忘れるのでメモ。値域が0以上255以下で、縦がheight, 横がwidthのランダム画像を生成するには np.random.randint(256, size=(height, width, 3)).astype(np.uint8) とします。以下でも同じことです。 np.random.randint(low=0, high=256, size=(height…

Pythonのインデント系エラーと戦う

Pythonスクリプトを書いてflake8にかけると、インデント量や改行タイミングの微妙な違反によって E125 continuation line with same indent as next logical line E129 visually indented line with same indent as next logical line といったエラーが出ま…

NumPyで2つのベクトル配列に対して順に内積を計算

2つの同型のベクトル配列a, bがあったとします。shapeは、ベクトルの次元をD、ベクトルの数をNとして(N, D)だとします。 0番目からN-1番目まで順に内積を取っていき長さNの結果を得ることを考えます。専用の命令があるのかと思ったらどうやらないようで、 ht…

Pythonスクリプトのテンプレートを考えてみた

Pythonの書き捨てスクリプトを書く速度を上げられるように、Pythonスクリプトのテンプレートを考えてみました。 経験上、どんなスクリプトでも以下を心がけると良いことが多いです。 コードは全部メイン関数の中に入れて、グローバル変数は許容しない 出力は…

NumPyでベクトルの長さを1に正規化

NumPyでベクトルの長さを1に正規化するには、np.linalg.normを使います。 ベクトルの例 例えば、要素数3のベクトルの長さ(より正確には、ユークリッド距離。すなわちL2ノルム)を1に正規化するには以下のようにします。 vec = np.array([3.0, 4.0, 5.0]) un…

random.randint()とnp.random.randint()の定義の違い

Python 3の random.randint() と NumPy の np.random.randint() には次のような微妙だが重大な違いがあります。 random.randint(a, b) a以上b以下の整数を1個選んで返します。以下のコードで、random.randint(3, 7)が3以上7以下の整数をランダムに生成するこ…

NumPyのブロードキャストのルール

NumPyのブロードキャストのルールについて曖昧にしか理解していなかったので調べました。わかってしまえば簡単です。 2つのarrayの間でブロードキャストができるかどうかは、2つのarrayのshapeによってのみ決まります。アルゴリズムは以下です。 もし2つのa…

NumPyのconcatenate(), vstack(), hstack(), dstack(), stack()の違い

NumPyのconcatenate(), vstack(), hstack(), dstack(), stack()の違い について毎回混乱するのでまとめました。 concatenate() 複数のアレイを、既存の軸に沿って結合する関数です。 基本的に、後述するvstack(), hstack(), dstack()の上位互換がconcatenate…

scikit-imageを使ってサンプル画像を簡単に取得

scikit-imageというPythonのライブラリを使うと、サンプル画像をさっと取ってくることができます。 コード例は以下です。 import skimage print("scikit-image version: {}".format(skimage.__version__)) coffee_image = skimage.data.coffee() print(coffe…

Python 3のsubprocess.run()の使い方

Python 3で外部コマンドを呼ぶにはsubprocessモジュールで提供されているrun()を使うことが推奨されるのですが、毎回使い方を調べてしまっているので自分用にまとめます。順を追っていかないと引数の意味を理解しづらいところがあるので、冗長ですが簡単な例…

Python 3で現在の日時を表示

毎回調べてしまっているのでメモ。 import datetime now = datetime.datetime.now() print(now) で 2021-05-31 21:10:18.332820 というふうに表示できるのだけれど、個人的には秒までで十分なことが多いので、以下のようにするのが多いです。 import datetim…

Python 3のunittestを使い始めるためのメモ

Pythonのunittestをちゃんと使ったことがなかったので、使い方について調べてまとめました。Windows 10のAnaconda Python 3.8.5で動作確認しています。 もっとも小さな例 被テストコードとテストコードとを同一のスクリプトに記述した小さな例を以下に示しま…

matplotlibでグラフを保存するときのテンプレート

サーバにてmatplotlibを使ってグラフを作成し、ファイルに保存することがよくあるのですが、実装するたびにググりまくって非効率なので、私が高確率で使う機能をテンプレ化しました。 さっそくコードを以下に示します。 import matplotlib import matplotlib…

PowerShellからAnaconda Pythonの仮想環境を使えるようにしたときのメモ

PowerShellにてAnaconda Pythonの仮想環境をactivateしようとしてactivate (仮想環境名)というコマンドを実行しても何も起こりません。これを修正しようとしたときにやったことのメモです。注:私はAnaconda PythonにもPowerShellにも精通していないため、こ…

Python 3のsqlite3モジュールでSQLiteの練習

Python 3の標準ライブラリであるsqlite3を使って、SQLite と呼ばれるデータベースを触ってみるメモです。 基本 テーブルを作成 以下のコードでは、都道府県のデータを格納するprefecturesという名前のテーブルを定義します。このテーブルは、name(都道府県名…

Pythonのexceptionをprint()して何も出ない原因

Python 3にて以下のように例外オブジェクトをprint()するコード try: raise ValueError except Exception as e: print(e) を実行しても、以下のように何も出力されません。 結論からいうと、上記のコードを以下のように修正すると try: raise ValueError('va…

VS CodeでPython 3の競プロコードをデバッグ実行

AtCoderやCodeforcesなどの競技プログラミングサイトでは、通常、標準入力から入力を受け取ります。例えばPythonで回答する場合、あなたの回答(例としてsolve.pyとします)は、入力が書かれたテキストファイルinput.txtが $ python solve.py < input.txt の…

Python3でエラー発生時にデバッガを起動する

Python3のスクリプトを数時間動かしたあとにエラーで落ちるという経験はないでしょうか。エラーが発生したら pdb と呼ばれるデバッガが起動するようにしておくと、エラーの究明に役立ちます。 例えば、以下のような script.py があったとします。 def main()…

flake8を使いこなす

Pythonのコード改善のためのツール5つを試してみた - minus9d's diary の中で個人的にもっともよさそうだと感じたflake8について、使い方を詳しく調べました。 インストール $ pip install flake8 バージョンとプラグインの確認 $ flake8 --version すると、…

Pythonにてリストの最後の要素を消すにはdelかpop()を使う

Pythonにて長さ100000のリスト arr があるとします。このリストの末尾を削除するとき arr = arr[:-1] とする方法は非常に遅いので要注意です。arr[:-1]により新規にリストが作成されてしまうのが原因です。ついカジュアルにこのような書き方をしてしまいがち…

Pythonのコード改善のためのツール5つを試してみた

Pythonのコードを改善するためのツールについて一通り試してみました。各ツールのインストール方法や使い方については Pythonのスタイルガイドとそれを守るための各種Lint・解析ツール5種まとめ! - Sider Blog に詳細にまとまっているのでおすすめです。 サ…

AnacondaのNumPyとPyPIのNumPyの速度を比較する

Anaconda Pythonで提供されるNumPyはIntelのMKLを利用しているため高速だという話を聞いたことがあります。実際どの程度違いがあるのか試してみました。 環境構築 実験は、自作PCに入れたUbuntu 16.04で行いました。環境構築にはAnaconda Pythonが提供する仮…

Jupyter Notebookの公開方法

Jupyter Notebookをどのように公開すると管理が楽かを考え中です。調査結果を以下に示します。 Github Githubのレポジトリに登録された.ipynbファイルは自動的に整形されて閲覧できます。(例:python_exercise/matplotlib_exercise.ipynb at master · minus…

Pythonで、小数を分数で近似する方法いろいろ

例えば3.14を分数で近似するには、分子と分母をどう選べばよいでしょうか。調べてみるとなかなか奥が深い問題です。 方法1. floatのas_integer_ratio() 以下のように、as_integer_ratio()を用いることができます。 >>> (0.25).as_integer_ratio() (1, 4) こ…

Pythonの並列処理・並行処理のための標準モジュールの比較

Pythonで並列処理・並行処理を提供する標準モジュールは数多くあり、初めてだと違いを理解するのは困難です。この記事では、それぞれの違いについて調べました。 threadモジュール(Python 2), _threadモジュール(Python 3) かつてPython 2にはthreadモジュー…

Pillowで読み込んだ画像に対してChainerCVの検出器を実行

今年の8月、PFNからGitHub - chainer/chainercv: ChainerCV: a Library for Computer Vision in Deep Learningがリリースされました。今のところ2つの物体検出手法(Faster R-CNN, SSD)と1つの画像セグメンテーション手法(SemSeg)が実装されています。example…

Fluent PythonはPython中級者にお勧めの名著

少し前のことですが、一年以上かかってのろのろ読んでいたFluent Python - O'Reilly Mediaをようやく読み終わりました。792ページもの厚さにもかかわらず密度が非常に濃く、どのページにも発見がある名著だと思います。オライリー公式での高評価も頷けます(…

100 numpy exercisesの解説 76~100

100 numpy exercisesの解説 51~75 - minus9d’s diary の続きです。引き続き、 numpy-100/100 Numpy exercises.ipynb at master · rougier/numpy-100 · GitHub を片手にご覧ください。 76. Consider a one-dimensional array Z, build a two-dimensional arra…