物理の駅 Physics station by 現役研究者

テクノロジーは共有されてこそ栄える

Python

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を使ったデコードの仕方などの知識を使う。 V00000001_L0_VX0001_VY0000_ma…

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…

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をインストール Ubuntu (WSL2) Windows 各パッケージのインストール 日本語フォント Ubuntu Windows Jupyter extension Windowsでipynbをjupyter labで開く 方法 Jupyterのバージョン確認 PIP関連 Ubuntu(WSL2)へインストール Windowsへインストール P…

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 (TOC)をインストールしてみる 拡張機能 パズルのピースっぽいマークを選択。なければSettings->Enable Extension manager (Experimental)をクリック toc を…

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 直線間の距離,…

Python+matplotlibの基本設定とsubplotsのサイズや隙間を調整する方法

rcParamsの使い方 デフォルトのfigureのサイズを指定する アスペクト比を設定 上下左右の隙間を設定する figsizeに合わせて上下左右とsubplots間の隙間を自動調整 さらに細かくレイアウトを調整 subplotsに共通の軸ラベルを付ける 軸設定 (transform) rcPara…

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でscipyを使わず一次関数(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の背景を白にする方法 (旧記事)

新記事に全てまとめました phst.hateblo.jp

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…

Windows Jupyter Lab をPDF化するとき日本語が出力されない問題を解決

JupyterファイルをそのままPDF化すると、日本語(2バイト文字)が出力されない。出力されるように、テンプレートのdocumentclassを変更する。 jupyter --path で出力されるパス data: C:\Users\Masahiro\AppData\Roaming\jupyter C:\Users\Masahiro\AppData\Ro…

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

PythonのJupyter Lab等でPDF出力するには、pandocを使ってLaTeXファイルを生成してから、それをXeLaTeXを通してPDF化するという手順を踏む。 pandocをインストールしていないと、 500 : Internal Server Error The error was: nbconvert failed: Pandoc wasn…

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

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