Python

2025年2月 6日 (木)

[Python]コマンドラインでバージョンを確認する

-Vオプションを使う。-VVとすると(when given twice, print more information about the build)、より詳細な情報を表示する。

>python -V
Python 3.9.16
>python -VV
Python 3.9.16 (main, Mar 8 2023, 10:39:24) [MSC v.1916 64 bit (AMD64)]

2025年2月 3日 (月)

[Python]文字列のハッシュ値を得る

hashlibモジュールの関数を使う。関数はハッシュオブジェクトというハッシュ値を格納したオブジェクトを返すので、関数を指定して戻り値を決める。

>>> import hashlib
>>> s = "鈴木みのり"
>>> md5 = hashlib.md5(s.encode()).hexdigest()
>>> print(md5)
2cdcdf384125ac19c173e9517b23847b
>>> sha1 = hashlib.sha1(s.encode()).hexdigest()
>>> print(sha1)
728d6a009b1700f9759ed2b502a0f673820700d5
>>> sha256 = hashlib.sha256(s.encode()).hexdigest()
>>> print(sha256)
4a806bf1e967f0764841aabcb3e634316f4b19be1dc9244480cd2c26c315db2b

2023年6月 5日 (月)

[Python]等差数列を作成する

numpyのlinspaceメソッドを使う。

>>> import numpy as np
>>> print(np.linspace(0, 12, 2))
[ 0. 12.]
>>> print(np.linspace(0, 12, 3))
[ 0. 6. 12.]
>>> print(np.linspace(0, 12, 4))
[ 0. 4. 8. 12.]
>>> print(np.linspace(0, 12, 5))
[ 0. 3. 6. 9. 12.]
>>> print(np.linspace(0, 12, 6))
[ 0. 2.4 4.8 7.2 9.6 12. ]

2023年4月26日 (水)

[Python]連立一次方程式を解く

solveメソッドを使う。以下の連立一次方程式を解く(解はx=3,y=2)。

 x + 2y = 7
3x - 4y = 1

解いてみる。

>>> import numpy as np
>>> mxaa = np.array([[1, 2], [3, -4]])
>>> mxy = np.array([7, 1])
>>> mxaa
array([[ 1, 2],
[ 3, -4]])
>>> mxy
array([7, 1])
>>> np.linalg.solve(mxaa, mxy)
array([3., 2.])

同じく以下の連立一次方程式を解く(解はx=2,y=-3,z=-14)。

 3x - 3y + z =  1
3x + 2y = 0
-1x - 5y + z = -1

解いてみる。

>>> mxaa = np.array([[3, -3, 1], [3, 2, 0], [-1, -5, 1]])
>>> mxy = np.array([1, 0, -1])
>>> mxaa
array([[ 3, -3, 1],
[ 3, 2, 0],
[-1, -5, 1]])
>>> mxy
array([ 1, 0, -1])
>>> np.linalg.solve(mxaa, mxy)
array([ 2., -3., -14.])

2023年4月15日 (土)

[Python]ファイルのハッシュ値を得る

hashlibライブラリを使う。以下はPHPの圧縮ファイルのハッシュ値(SHA256)を求めた例。

R_hash

>>> import hashlib
>>> f = open('php-8.2.4-Win32-vs16-x64.zip', 'br')
>>> b = f.read()
>>> hashlib.sha256(b).hexdigest()
'a3601fe23adfb4985be52eb3a7365716350e4b857c47583673a9aa53162885a3'
>>> f.close()

2023年4月13日 (木)

[Python]一般逆行列を求める

linalg.pinvメソッドを使う。

>>> import numpy as np
>>> mx = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]])
>>> print(mx)
[[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]
[13 14 15 16]]
>>> np.linalg.det(mx)
-1.820448242817726e-31
>>> np.linalg.inv(mx)
array([[ 1.50119988e+15, -3.75299969e+14, -3.75299969e+15,
2.62709978e+15],
[-1.95155984e+16, 1.95155984e+16, 1.95155984e+16,
-1.95155984e+16],
[ 3.45275971e+16, -3.79052969e+16, -2.77721977e+16,
3.11498974e+16],
[-1.65131986e+16, 1.87649984e+16, 1.20095990e+16,
-1.42613988e+16]])
>>> np.linalg.pinv(mx)
array([[-0.285 , -0.145 , -0.005 , 0.135 ],
[-0.1075, -0.0525, 0.0025, 0.0575],
[ 0.07 , 0.04 , 0.01 , -0.02 ],
[ 0.2475, 0.1325, 0.0175, -0.0975]])

一般逆行列の定義を満たしているか否か確認。

>>> mxi = np.linalg.pinv(mx)
>>> np.dot(np.dot(mx, mxi), mx)
array([[ 1., 2., 3., 4.],
[ 5., 6., 7., 8.],
[ 9., 10., 11., 12.],
[13., 14., 15., 16.]])

当然、正方行列でなくとも求めることができる。

>>> mx = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])
>>> print(mx)
[[1 2 3 4]
[5 6 7 8]]
>>> np.linalg.det(mx)
(表示省略)
numpy.linalg.LinAlgError: Last 2 dimensions of the array must be square
>>> np.linalg.inv(mx)
(表示省略)
numpy.linalg.LinAlgError: Last 2 dimensions of the array must be square
>>> np.linalg.pinv(mx)
array([[-5.50000000e-01, 2.50000000e-01],
[-2.25000000e-01, 1.25000000e-01],
[ 1.00000000e-01, -1.38777878e-17],
[ 4.25000000e-01, -1.25000000e-01]])
>>> mxi = np.linalg.pinv(mx)
>>> np.dot(np.dot(mx, mxi), mx)
array([[1., 2., 3., 4.],
[5., 6., 7., 8.]])

linalg.pinvメソッドはムーア・ペンローズ一般逆行列を数値的に求めるメソッドのため、求まった一般逆行列は近似値であることに注意。ムーア・ペンローズ一般逆行列の定義の4つの式について、比較をした例は以下のとおり。すべての要素がTrueにならないことがわかる。

>>> np.dot(np.dot(mx, mxi), mx) == mx
array([[False, False, False, True],
[False, False, False, False]])
>>> np.dot(np.dot(mxi, mx), mxi) == mxi
array([[False, False],
[False, True],
[False, False],
[False, False]])
>>> np.dot(mx, mxi).T == np.dot(mx, mxi)
array([[ True, False],
[False, True]])
>>> np.dot(mxi, mx).T == np.dot(mxi, mx)
array([[ True, False, False, False],
[False, True, False, True],
[False, False, True, True],
[False, True, True, True]])

2023年4月12日 (水)

[Python]逆行列を求める

linalg.invメソッドを使う。

>>> mx = np.array([[3]])
>>> mx
array([[3]])
>>> np.linalg.inv(mx)
array([[0.33333333]])
>>> mx = np.array([[1, 2], [3, 4]])
>>> mx
array([[1, 2],
[3, 4]])
>>> np.linalg.inv(mx)
array([[-2. , 1. ],
[ 1.5, -0.5]])
>>> mx = np.array([[3, -3, 1], [3, 2, 0], [-1, -5, 1]])
>>> mx
array([[ 3, -3, 1],
[ 3, 2, 0],
[-1, -5, 1]])
>>> np.linalg.inv(mx)
array([[ 1. , -1. , -1. ],
[-1.5, 2. , 1.5],
[-6.5, 9. , 7.5]])

正則ではない行列(行列式の値が0)の場合は、linalg.invメソッドはエラーを返す。

>>> mx = np.array([[1, 4, 7], [2, 5, 8], [3, 6, 9]])
>>> mx
array([[1, 4, 7],
[2, 5, 8],
[3, 6, 9]])
>>> np.linalg.det(mx)
0.0
>>> np.linalg.inv(mx)
Traceback (most recent call last):
(表示省略)
numpy.linalg.LinAlgError: Singular matrix

2023年3月14日 (火)

[Python]行列式を求める

linalg.detメソッドを使う。

>>> mx = np.array([[3]])
>>> mx
array([[3]])
>>> np.linalg.det(mx)
3.0000000000000004
>>> mx = np.array([[1, 2], [3, 4]])
>>> mx
array([[1, 2],
[3, 4]])
>>> np.linalg.det(mx)
-2.0000000000000004
>>> mx = np.array([[0, 3, 2, -1], [-4, 6, 1, 5], [0, -2, 3, -1], [-1, 0, 0, 2]])
>>> mx
array([[ 0, 3, 2, -1],
[-4, 6, 1, 5],
[ 0, -2, 3, -1],
[-1, 0, 0, 2]])
>>> np.linalg.det(mx)
27.999999999999986

2023年3月 6日 (月)

[Python]転置行列を求める

Tプロパティを使う。

>>> import numpy as np
>>> mx = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
>>> print(mx)
[[1 2 3]
[4 5 6]
[7 8 9]]
>>> print(mx.T)
[[1 4 7]
[2 5 8]
[3 6 9]]
>>> mx = np.array([[1, 2, 3], [4, 5, 6]])
>>> print(mx)
[[1 2 3]
[4 5 6]]
>>> print(mx.T)
[[1 4]
[2 5]
[3 6]]

2023年2月 4日 (土)

[Python]行列の掛け算

dotメソッドを使う。最後の例のとおり、掛けられる行列の列数と掛ける行列の行数が同じでなければ計算することはできない。

>>> mx1 = np.array([[-1, 0, 3], [8, 1, -5]])
>>> mx2 = np.array([[3, 4, 0], [-2, 1, 2]])
>>> mx3 = np.array([[4, -3, 7], [2, 0, -1], [1, 5, 0]])
>>> print(mx1)
[[-1 0 3]
[ 8 1 -5]]
>>> print(mx2)
[[ 3 4 0]
[-2 1 2]]
>>> print(mx3)
[[ 4 -3 7]
[ 2 0 -1]
[ 1 5 0]]
>>> np.dot(mx1, mx3)
array([[ -1, 18, -7],
[ 29, -49, 55]])
>>> np.dot(mx2, mx3)
array([[ 20, -9, 17],
[ -4, 16, -15]])
>>> np.dot(mx1, mx2)
Traceback (most recent call last):
File "", line 1, in
File "<__array_function__ internals>", line 5, in dot
ValueError: shapes (2,3) and (2,3) not aligned: 3 (dim 1) != 2 (dim 0)

より以前の記事一覧

無料ブログはココログ

■■

■■■