物理の駅 by onsanai

Physics Station → PhSt 質問・疑問・間違いの指摘は、コメントに書くか、直接伝えるときっと良いことがあります。主にWindows or Ubuntu用の記事です

Python

Pythonで引数付きのマルチスレッドとマルチプロセスを簡単に実装する

concurrent.futures の ThreadPoolExecutor と、 ProcessPoolExecutor を使うのがセオリーだろう。 スレッド内、プロセス内で例外が出たらprintする機能、スレッドやプロセスを順番に回収して残りスレッド数・プロセス数を表示する機能を実装してある。 使い…

Pythonで直線同士の最接近距離と最接近点を知る

まずは、 その19 直線同士の最接近距離と最接近点を知る をPythonへ移植する import numpy as np # http://marupeke296.com/COL_3D_No19_LinesDistAndPos.html def distance_2lines(line1, line2): ''' 直線同士の最接近距離と最接近点 return 直線間の距離,…

論文用のデータをmatplotlibで作るテスト

import numpy as np import matplotlib.pyplot as plt import matplotlib plt.rcParams['xtick.direction'] = 'in' plt.rcParams['ytick.direction'] = 'in' plt.rcParams['xtick.major.width'] = 1.0 plt.rcParams['ytick.major.width'] = 1.0 plt.rcParams…

Python+OpenCV+pyzbarでQRコードを読み取ってみる

取り急ぎ、Windows PCでQRコードを読み込みたい需要があったので、書いてみた。QRコードをデコードするコードは下記のqiitaを丸パクリした。 qiita.com import cv2 from pyzbar import pyzbar import subprocess # デバイス上でのウェブカメラを取得 cap = c…

Python YAML形式でKeyでソートさせない

qiita.com import yaml from collections import OrderedDict def represent_odict(dumper, instance): return dumper.represent_mapping('tag:yaml.org,2002:map', instance.items()) yaml.add_representer(OrderedDict, represent_odict) obj = OrderedDic…

Python: 正規表現ライブラリを使って、グループ化による置換

以下のような、核種を表す表記を、LaTeXで使えるような表記に置換したい。 He4 → \Nuc{He}{4}{} He5L → \Nuc{He}{4}{\Lambda} シンプルなコードだと以下の通り。 グループ化という機能を使って、正規表現側で () で囲むと、囲んだところが \1 \2 と番号が振…

Python: 二次元データを一次関数(y=ax+b)でフィッティング、係数と係数の誤差を得る

参考にした解説: http://www.cc.u-ryukyu.ac.jp/~fukami/p0.pdf 及び岐阜大学教育学部の物理学実験及びコンピュータ処理の解答例 ある二次元(x,y)の点列で与えられるデータ群を、一次関数 (=直線) でフィッティングするとき、残差 を最小にするためには、そ…

Python: 分散共分散行列の求め方とMCデータの作成方法

Pythonのnumpyの np.cov を使って分散共分散行列を求め、モンテカルロデータを作るために np.random.multivariate_normal を使って分散共分散行列に従う乱数を生成する。 また、生成した乱数の標準偏差を求めることで、プログラムの検証をした。 import nump…

Pythonの機械学習のための画像の前処理と後処理

画像の読み込み(今回はグレー画像) ROI (今回の画像は300×300pixel、中央56×56 pixelを使う) リサイズ(伝統的なサンプルにならって28×28 pixelにするため0.5倍) フリップ・回転(サンプル画像を8倍に増やすため) revel() で1次元化 import cv2 import numpy a…

Kerasのノウハウ覚え書き

qiita.com

Pythonのmatplotlibの2次元ヒストグラムで値が0のbinの背景を白にする方法

matplotlib.pyplot の hist2d では、ビンの値が0のとき、背景を無色(白)にできない。 np.ma.masked_where を使い指定する値(以下の例では0)のbinの内容 type を numpy.ma.core.MaskedConstant にすると、 plt.pcolormesh で描画したときにmask部分が塗りつぶ…

Pythonでユーザのホームディレクトリを取得する方法

Pythonで、ユーザのホームディレクトリ、すなわちログイン時のカレントディレクトリを取得する方法は、WindowsでもUbuntuでも(Macでも)同じ方法が使える。 Windowsの場合 >>> from os.path import expanduser >>> expanduser("~") 'C:\\Users\\Masahiro' Ubu…

Pythonでエアリー関数を使う

from scipy import special import numpy as np import matplotlib.pyplot as plt x = np.linspace(-15, 5, 201) (ai, aip, bi, bip) = special.airy(x) plt.plot(x, ai, label="ai") plt.plot(x, bi, label="bi") plt.ylim(-0.5, 1.0) plt.legend() plt.sho…

Jupyter Labで日本語を含むNotebookをXeLaTeXでPDF化

日本語を含むJupyterファイルをそのままPDF化することはできない。テンプレートのdocumentclassを変更し、日本語用のパッケージやフォントを追加する。 具体的には、\Lib\site-packages\nbconvert\templates\latex\ 内の style_jupyter.tplx article.tplx ba…

Windows上のPython Jupyter LabでPDF出力したときの500 : Internal Server Error

PythonのJupyter Lab等でPDF出力するコマンドは、pandocを使ってLaTeXファイルを生成してから、それをXeLaTeXを通してPDF化するという手順を踏む。よって、まずはXeLaTeXにPathが通っていることが前提である。LaTeXのインストールについては、下記の記事を参…

Python+OpenCVで確率的ハフ変換を用いた直線認識

グレースケールで上記の画像を読み込む。 31x31のカーネルサイズのガウシアンフィルタをかける ガウシアンフィルタをかけた画像から元画像を引く しきい値 18 の処理をかける 確率的ハフ変換を行う 直線を描画する # %% import cv2 import numpy as np img =…

Pythonでユーザー名とコンピュータ名を得る

import platform platform.node() import getpass getpass.getuser()

Pythonで数値的な二階微分をやってみる

今回は、正規分布をnumpyの双曲線正接(hyperbolic tan)で囲ったような関数の微分、二階微分を求めてみる。 np.gradient が重要だそうだ。 import numpy as np import matplotlib.pyplot as plt def func(x): return np.tanh(np.exp(-x*x)) arr = np.array([i…

OpenCVのサンプルコードを Python + OpenCV + numpy版に書き換える

書き換えるのは下記で紹介してるコード phst.hateblo.jp import cv2 import numpy as np src = np.zeros((150, 220, 3), np.uint8) cv2.putText(src, "Hello World", (5, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 200), 2, cv2.LINE_AA) cv2.line(src, (19…

LattePanda 1st edition (Z8350) + Ubuntu + OpenCV by Pythonで画像処理をしてみる

VSCodeをインストールする $ sudo snap install --classic code Pythonをインストールする www.python.jp pip、OpenCV、NumPy等のインストールを行う pip3 install opencv-python --user pip3 install numpy --user pip3 install matplotlib --user 次の記事…

Python上でのpickle化、非pickle化

pickleにする import pickle data1 = [1, 2] data2 = [3, 4, 5] pickle.dump((data1, data2), open("data1_2.pickle",'wb')) 非pickleにする import pickle (data3, data4) = pickle.load(open("data1_2.pickle",'rb')) print(data3) print(data4) なお、dat…

Pythonの辞書型(dict)をソート(sort)する方法

sortedはリストが返ってくるので、dictに入れてdictに変換するのがポイント dct = { 2: 3, 3: 4, 1: 2, 0: 8, 4: 2 } # 昇順 dct =dict(sorted(dct .items())) print(dct) # {0: 8, 1: 2, 2: 3, 3: 4, 4: 2} # 降順 dct = dict(sorted(dct.items(), key=lamb…

ダブルΛハイパー核 NagaraイベントをROOTとPythonを使ってMCで発生させてみる

3体崩壊で、粒子が完全にランダムに崩壊したとすると、粒子1と粒子2の不変質量の2乗と、粒子1と粒子3の不変質量の2乗分布が一様になるように崩壊する。 ROOT のライブラリを使って、これを実際に発生してみる。BΞとΔBΛΛは0としている。 #include <iostream> #include <fstream> </fstream></iostream>…

matplotlibのsubplotsで共通のカラーバーを表示する

qiita.com これの丸コピだが、一応。 import matplotlib.pyplot as plt import numpy as np def f(x, y): return np.exp(-(x * x) / (2 * 3 ** 2)) * np.exp(-(y * y) / (2 * 3 ** 2)) X, Y = np.mgrid[0:21:1.0, 0:21:1.0] X-=10.0 Y-=10.0 Y*=2.0 Z = f(X,…

Python3で、正規分布でフィッティングし、各パラメータとカイ二乗を得る汎用的な関数を作ってみる

phst.hateblo.jp これを少し汎用化して、リスト、ビンの数、最小値、最大値を与えて、正規分布でフィッティングする関数を作ってみた。 オプションで平均値の初期値、標準偏差の初期値、グラフを描画するかどうかを与える。 注: グラフの縦方向のエラーが分…

PythonをAnacondaを使ってインストールしてからのコマンド一覧

Anacondaを使ってPythonと関連パッケージをインストールする www.anaconda.com Pathを通しますか? というところでチェックを入れると良い。 pip自体のアップグレードは最新pipにバグがあるのでやらないほうが良い pip install --upgrade pip --user --upgrad…

TensorFlowをWindows + Nvidia GPUで使ってみる (2019/08/21)

日々バージョンが新しくなってるので、2019/08/21時点で。 Cuda Toolkit 10.0 ダウンロードとインストール https://developer.nvidia.com/cuda-10.0-download-archive 現時点での最新版は10.1だったが、pipからインストールできるtensorflow-gpuは10.0だった…

Pythonでデッドロックを回避しながらサブプロセスの標準出力を1行ずつ読み込む

Windowsだとシステムからの文字コードはshift_jisなのでそれに対応 stderr = subprocess.PIPE にすると、 proc.stdout.readline を先に書いたとき、 stderr側での出力が貯まりすぎると、デッドロックが発生することがあるらしい。なので、stderrもSTDOUT側に…

WindowsでもPythonのコンソール上で色文字と色背景を使う

import colorama colorama.init() print(colorama.Back.GREEN + colorama.Fore.RED + "これがテストです") print("設定は引き継がれる") print(colorama.Style.RESET_ALL,end="") print("リセットでもとに戻る") colorama.deinit() colorama.deinit() をしな…

直交座標系のずれ量を飛跡の角度に相当するRadial Lateral空間に変換するコード

放射線の飛跡のように、座標(cx, cy) 角度 (ax, ay)で表すことの出来る量の比較をする時、しばしば飛跡の進行方向(Radial方向)と垂直方向(Lateral方向)に分離して考えることがある。 飛跡1 (cx1, cy1, ax1, ay1)、飛跡2 (cx2, cy2, ax2, ay2) があるとき、角…