物理の駅 by onsanai

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

Python

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 --user 誤差付きの小数の定義は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.00498…

pythonでShift-JISやasciiのファイルを一括でUTF-8 with BOMへ変換する

Visual Studio用。 UTF-8 BOMなしの場合は、/source-charset:utf-8 をつけておかないと、エライことになると同僚から報告を受けた。この話は後述する。 なので、可能な限りUTF-8 with BOMに自動で変換してみる。以下のコードを実行する前に必ずバックアップ…

WindowsでPython 3をインストールする方法

Pythonのインストール PATHを通す 各パッケージのインストール 日本語フォント Windows版 Ubuntu版 PIPについて --userの意味 PIPのインストール PIPコマンド Anacondaは使い方がよく分からない、ということで、Pythonからダウンロードすることを推奨する、…

pythonでCSVを扱ってみる

最近乱高下だったダウ平均株価を例にする。次のURLからTime PeriodをMaxにしてDownload Dataして、 DJI.csv として保存する。 finance.yahoo.com datetimeを使った時間のstrからdatetimeクラスへの変換とかも使う import csv import matplotlib.pyplot as pl…

Windows + Jupyter Labで拡張機能をインストールする

nodejsをインストールする。12.16.1 LTSで良い。 nodejs.org qiita.com 例えば、Table of Contentsをインストールしてみる 拡張機能 パズルのピースっぽいマークを選択。なければSettings->Enable Extension manager (Experimental)をクリック toc を検索 @j…

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で作るテスト

全オプションは plt.rcParams.keys() で確認できる。 import numpy as np import matplotlib.pyplot as plt import matplotlib plt.rcParams['xtick.direction'] = 'in' plt.rcParams['ytick.direction'] = 'in' plt.rcParams['xtick.top'] = True plt.rcPar…

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)の点列で与えられるデータ群を、一次関数 (=直線) でフィッティングするとき、カイ二乗を最小にすればよい。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 次の記事…