物理の駅 by 現役研究者

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

Python

Python で数値を科学的表記にする方法

科学的な表記のため、あまりにも長い桁数を丸める必要がある。ざっくりそういう需要のための関数を作った。 やり方は、指数表記にして指数部の大きさで判定させているだけである。自分で作ったほうが早いと思うので参考にしつつ作ってみてはどうだろうか。 d…

Python scipyで任意の方程式の解を求める

from scipy.optimize import fsolve import numpy as np # 変数 beta = 0.6955076793404303 ionpair = 4886 # 方程式 func = lambda delE : np.sqrt(delE/(np.log(ionpair*beta**2)-np.log(1-beta**2)-beta**2))*beta-92 # 初期値 initial_guess = 1000 # 解…

Python matplotlibのhist2dでカラーバーをfigsなしで表示する方法

import matplotlib.pyplot as plt import numpy as np x = np.random.normal(0,1,10000) #平均0、標準偏差1、N=10000 y = np.random.normal(3,2,10000) #平均3、標準偏差2、N=10000 counts, xedges, yedges, im = plt.hist2d(x, y, range=[[-10,10],[-10,10]…

Pythonで、正規分布でフィッティングする汎用的な関数を作ってみる 2

過去のコードをより汎用的にするために修正した。 phst.hateblo.jp 小数の桁を取得して、小数点以下の有効桁数が4桁になるようにした。 gaus_sample.txt は ガウス分布のフィッティング用のサンプルデータ Sample data からダウンロードできます。 import ma…

複数のサーバーを、PythonとHTMLで監視する

pingを飛ばすのに pings というパッケージを使った pip install pings でインストール可能。次の例では36台のPCを監視している。 import datetime import matplotlib.pyplot as plt import pings hosts = [] for i in range(1, 37): hosts.append("192.168.0…

Pythonで複数のPNG画像をPDFファイルに変換する

画像からPDFにするためのパッケージ img2pdf が必要。 数字を自然順にソートするためのパッケージと関数 natsort natsorted が必要。 PNGファイルに透過チャンネルがある場合、 img2pdf.AlphaChannelError: Refusing to work on images with alpha channel …

Pythonのmatplotlibで長方形 Rectangle を描画する

0 0 0 -1000.0 6000.0 -1000.0 6000.0 0.0 5000.0 0.0 5000.0 - 1 1 0 4000.0 11000.0 -1000.0 6000.0 5000.0 10000.0 0.0 5000.0 - 2 2 0 9000.0 16000.0 -1000.0 6000.0 10000.0 15000.0 0.0 5000.0 - 3 3 0 14000.0 21000.0 -1000.0 6000.0 15000.0 20001…

OpenCV Pythonで画像の切り抜き (トリミング)

OpenCVでいうところのRectをやるには、配列の一部をスライスすればよい。 dst1 はY=164からHeight=2960、X=356からWidth=2028ピクセル分。XとYが逆になってることに注意。 import cv2 import glob files = glob.glob("*.jpg") i=0 for file in files: im = c…

WSL用のFedora RemixでROOT PyROOT などを使う

WSL用のFedora Remixを購入しインストールする Fedora Remix for WSL を購入 - Microsoft Store ja-JP $ sudo yum install root $ sudo yum install root python3-root root-notebook これで終わり。 WSLのデフォルトをFedora Remixにする wsl --set-default…

PyROOTでROOTファイルを読む TFileとRDataFrameの比較

PyROOTでROOTファイルを扱うには、ROOTの作法に従うか、Numpyで頑張るかの2択となる。 ROOTの作法に従った例 ROOTファイルに、イベントごとに色んなパラメータが固定長で格納されているものとする。データ名 ADC の[0]に格納されているデータをヒストグラム…

WSL上のJupyter LabでPython/ROOT C++/PyROOT、Jupyter Notebookでjsrootを動かす

超メモです。$は削除して実行してください WSLでJupyter Labを動かす方法 nodejsは最新版を推奨する。それ以外だとエラーが出ることがある。pip3でsudoは付けない。以下、実行すべきコマンド。 $ sudo sed -i.bak -e 's%http://[^ ]\+%mirror://mirrors.ubun…

PythonでZIPファイルを作成する

arXivに投稿する時、関連するファイルをZIPファイルで書庫化しておくと楽である。動的にZIPファイルを作るにはPythonが手っ取り早いので、コードを作ってみた。 # PTEPのフォーマットで必要なファイルリスト # bibを使うときはbblも必要 import zipfile impo…

Woods-Saxon potentialをPythonで描画する

import numpy as np from matplotlib import pyplot as plt v0 = 14 A = 15 a = 0.5 r0 = 1.25 R = r0*A**(1/3) x = np.linspace(0.0, 10.0) y = -v0/(1+np.exp((x-R)/a)) plt.plot(x, y, "b-") plt.title(r"Woods-Saxon potential") plt.text(3, -v0*0.8, r…

ポアソン分布と二項分布をPythonで描画する

Pythonを用いた ポアソン分布の確率分布の描画。適宜meanを変えてね。 from scipy.stats import poisson import matplotlib.pyplot as plt mean = 2.3 xs = [] prob = [] for i in range(7): print(i,poisson.pmf(i, mean)) prob.append(poisson.pmf(i, mean…

Pythonで動画ファイル (形式.mp4)から画像を切り出す

note.nkmk.me OpenCVを使うとすぐに実装できる。ほぼ上記URLのサンプル通り。 import cv2 import os def save_all_frames(video_path, ext='jpg'): if not os.path.exists(video_path): return cap = cv2.VideoCapture(video_path) if not cap.isOpened(): r…

ウェブ上にあるPDFファイルをダウンロードする方法

import urllib.request url = "https://test.test/test.pdf" filename = "test.pdf" urllib.request.urlretrieve(url, filename)

Pythonで2次元ヒストグラムをモルワイデ図法で描画する方法

stackoverflow.com を参考にした。 2Dヒストグラムのbinデータを自力で用意し、pcolormesh で描画する。その方法は pythonのmatplotlibで2次元ヒストグラム(hist2d)のビンの値を直接操作する - 物理の駅 by onsanai で解説している。 モルワイデ図法にするコ…

Python の plt.quiver で矢印を描画する

matplotlib.pyplot.arrowを使わず、matplotlib.pyplot.quiverを使うとうまくかける。矢印の始点(px, py)、矢印のベクトル(vx, vy)、色(colors)を作り、quiverに与える。 ベクトルは、範囲に収まるように適宜係数をかける。(今回だと *0.1 ) scale = 1,scale_…

漫画のEPUBファイルから画像をPythonで取得する方法

pypi.org が便利だった。 pip install EbookLib でインストール カバーebooklib.ITEM_COVERと、画像ebooklib.ITEM_IMAGEをそれぞれ開き、バイナリ形式で出力する。 import ebooklib from ebooklib import epub import os book = epub.read_epub('filename.ep…

matplotlibでアスペクト比をset_aspect('equal')で一致させる

import matplotlib.pyplot as plt fig, ax = plt.subplots() ax.set_aspect('equal') または plt.gca().set_aspect('equal')

Chromeを使ってログインが必要なウェブサイトをスクレイピングする

Chromeを遠隔操作するタイプで動かすのが直感的で分かりやすかった。 qiita.com まずは selenium をインストールする pip install selenium chromedriver-binaryをインストールする。https://pypi.org/project/chromedriver-binary/#history へアクセスして…

Python: 2つ以上のリストをあるリストで同時にソートする

以下の例では、list2でソートするためにd[1]と指定している。 list1 = ["a", "c", "b", "aa"] list2 = [8, 2, 5, 6] list3 = [1.4, 6.3, 4.5, 4.1] print(list1, list2, list3) list1, list2, list3 = zip(*sorted(zip(list1, list2, list3), key=lambda d: …

16bitモノクロ画像を8bitモノクロ画像に変換するコード

16bitモノクロ画像の輝度値の最小が3802、最大が11113とする。 import numpy as np import cv2 src= cv2.imread("input.tif",-1) src=np.add(src, -3802) src=src*(255/(11113-3802)) dst = src.astype(np.uint8) cv2.imwrite("output.png",dst) 注意点: imr…

PythonでWikipediaに登場するひらがなの数を数えてみる

Wikiediaには、ランダムなページに飛んでくれるSpecialなURLがある。 https://ja.wikipedia.org/wiki/Special:Randompage これを使って、適当なページに存在するひらがなの数を数えてみる。 import matplotlib.pyplot as plt import urllib.request n_pages …

Pythonで実行時に未インストールの外部モジュールをインストールする

from pip._internal import main as _main import importlib def _import(name, module, ver=None): try: globals()[name] = importlib.import_module(module) except ImportError: try: if ver is None: _main(['install', module]) else: _main(['install'…

Python + numpyを使って、3次元球面上/球内にランダムに点を描画するプログラム

等方的ビーム - KobaWiki 原理は先人のページを参考にしてほしい。以下、3次元球面上に乱数で点を描画するプログラムのPythonによる実装 import numpy as np xs = [] ys = [] zs = [] # 乱数を初期化 rng = np.random.RandomState(123) for _ in range(5000)…

Pythonで画像のラベリング→輝度値0以外の領域を分割して領域ごとの座標と輝度値リストを取得する

バージョン3以降のOpenCVには、画像のラベリングできる関数が実装されている。 connectedComponents は、入力画像と同じサイズの画像にラベルの番号が書かれた画像を返してくれる。 connectedComponentsWithStats はStats、すなわち面積、重心等を含めた情報…

PythonでWindowsの文字コード CRLF (\r\n)から、Linuxの文字コードLF(\n)へ変換する

txt = open(target_file, 'r', encoding='utf-8').read().replace('\r', '') with open(target_file, 'wb') as f: f.write(txt.encode('utf-8'))

SPNG形式(バイナリ形式で複数の画像を1ファイルに統合した独自形式)のPythonでの読み込み方

諸事情で複数の画像を簡易的に1つのファイルに統合したいことがあり、またそのファイルをPythonから読み込みたい需要があった。 Numpyを使ったバイナリファイルの読み込み方、OpenCVを使ったデコードの仕方などの知識を使う。 import cv2 import numpy as np…

How to use uncertainties to automatically propagate the error.

uncertainties をpipでインストールする pip install uncertainties 誤差付きの小数の定義はufloat である。 >>> from uncertainties import ufloat >>> a=ufloat(10,1) >>> b=ufloat(3,0.1) >>> a+b 13.0+/-1.004987562112089 >>> a-b 7.0+/-1.004987562112…