[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)]
-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)]
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
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. ]
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.])
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]])
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
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
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]]
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)
Access VBA Anaconda C# Excel Excel VBA Fortran gcc gnuplot Java Microsoft Access Microsoft Excel Octave Open JDK Perl Python Python(Anaconda) Python(テキストマイニング) Python(ファイル・ディレクトリの操作) Python(リスト) Python(変数とオブジェクト) Python(実行とデバッグ) Python(数と式) Python(数学) Python(文字と文字列) Python(環境) Python(行列) Rの操作 R(ggplot2) R(maptools) R(tidyverse) R(その他) R(インターネット) R(グラフィックス) R(セイバーメトリクス) R(データフレーム) R(データベース) R(パッケージ) R(ファイルの入出力) R(ベクトル) R(リスト) R(作図) R(地理空間情報) R(変数とオブジェクト) R(数と式) R(数値計算) R(数学) R(文字と文字列) R(日付と時刻) R(本の計算を再現) R(正規表現) R(演算子と制御構文) R(環境) R(画像) R(統計学) R(統計解析) R(行列) Visual Basic Visual C++