Python

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)

2023年1月21日 (土)

[Python]固有値、固有ベクトルを求める

eigen関数を使う。固有値、固有ベクトルを求めたい行列を引数に与えると、固有値と固有ベクトルが一緒に返ってくる。

以下に求めた例を示す。見てのとおり、対称行列でなくても求めることができる。

>>> import numpy as np
>>> mxaa = np.array([[3, -2], [1, 0]])
>>> print(mxaa)
[[ 3 -2]
[ 1 0]]
>>> l, mxxx = np.linalg.eig(mxaa)
>>> print(l)
[2. 1.]
>>> print(mxxx)
[[0.89442719 0.70710678]
[0.4472136 0.70710678]]

1つ目の戻り値が固有値、2つ目が固有ベクトル値。例えば1つ目の固有値と固有ベクトルを取り出すには、以下のようにする。

>>> l[0]
2.0
>>> mxxx[:, 0]
array([0.89442719, 0.4472136 ])

2つ目の固有値と固有ベクトル。

>>> l[1]
1.0
>>> mxxx[:, 1]
array([0.70710678, 0.70710678])

以下、2つの行列の固有値と固有ベクトルを求めた例。

>>> mxaa = np.array([[6, -3, 5], [-1, 4, -5], [-3, 3, -4]])
>>> print(mxaa)
[[ 6 -3 5]
[-1 4 -5]
[-3 3 -4]]
>>> l, mxxx = np.linalg.eig(mxaa)
>>> print(l)
[3. 2. 1.]
>>> print(mxxx)
[[ 7.07106781e-01 -3.01511345e-01 -3.49387479e-15]
[ 7.07106781e-01 -9.04534034e-01 8.57492926e-01]
[ 4.54569491e-16 -3.01511345e-01 5.14495755e-01]]
>>> mxaa = np.array([[3, -1, 1], [0, 2, 1], [0, 0, 3]])
>>> print(mxaa)
[[ 3 -1 1]
[ 0 2 1]
[ 0 0 3]]
>>> l, mxxx = np.linalg.eig(mxaa)
>>> print(l)
[3. 2. 3.]
>>> print(mxxx)
[[1. 0.70710678 0. ]
[0. 0.70710678 0.70710678]
[0. 0. 0.70710678]]

2022年11月 3日 (木)

[Python]桁を変数で指定して書式化する

formatメソッドまたは整形済み文字列リテラル(f文字列)を使用する。以下は、数値1.23456789を小数点以下4桁で表示(1.2346、四捨五入の処理により1.2345にはならない)するために、小数点以下4桁の指定(.4f)を、変数で指定した例。

>>> d = 1.23456789
>>> n = 4
>>> print('{:.{}f}'.format(d, n))
1.2346
>>> print(f'{d:.{n}f}')
1.2346

2022年10月30日 (日)

[Python]指定した長さの空白(0x20)文字列を作る

文字列リテラルと*演算子を使う。

>>> s = ' ' * 7
>>> len(s)
7
>>> print('>' + s + '<')
> <

2022年10月29日 (土)

[Python]同じ文字列が繰り返された文字列を作る

*演算子を使う。



>>> 'A' * 3
'AAA'
>>> 'Abc' * 4
'AbcAbcAbcAbc'

2022年10月28日 (金)

[Python]別フォルダーに置いてあるモジュール(ファイル)をインポートする

例えば、C:\workに置いてあるscript.pyの中で、C:\pythonに置いてあるmodule.pyをインポートする方法。sys.path.appendメソッドを使う。

script.py

import sys
sys.path.append('../python')
import module

sys.path.appendの引数には、読み込み先のフォルダーを、そのインポートするファイルが置かれているフォルダーを起点にした相対パスを指定する。Windows環境でも、パスセパレーターは「/」を使うことができる。

2022年10月27日 (木)

[Python]文字列の指定した一部を取り出す

スライス演算子を使う。インデックスの開始は0である。取り出す範囲の指定は、開始のインデックスは、取り出すその文字のインデックスを、終わりのインデックスは、取り出す文字の次のインデックスを指定することに注意。

>>> s = "ABC123あいう"
>>> s[0]
'A'
>>> s[1]
'B'
>>> s[0:3]
'ABC'
>>> s[5:8]
'3あい'
>>> s[5:]
'3あいう'
>>> s[:4]
'ABC1'

2022年10月18日 (火)

[Python]行の継続

\演算子を使う。また、( )演算子、[ ]演算子、{ }演算子の中でも自由に改行が行える。

>>> 1 \
... + 2
3
>>> print(1
... + 2)
3
>>> 1 \
... + 2
3
>>> 1
1
>>> 1 \
... + 2
3
>>> print(3
... + 4)
7

プログラムでも同様。以下、それぞれ3つのプログラムをそれぞれ実行した例。最後の例は、改行が認められない状態で改行をした際の実行例。

例.1

x = 1 + 2 + 3 \
+ 4 + 5
print(x)

出力

15

例.2

x = (1 + 2 + 3
+ 4 + 5)
print(x)

出力

15

例.3 ※この書き方は正しくないため、エラーが発生する

x = 1 + 2 + 3
+ 4 + 5
print(x)

出力

  File "○○.py", line 2
+ 4 + 5
IndentationError: unexpected indent

2022年10月14日 (金)

[Python]パスセパレーターを得る

osモジュールのsepを使う。以下は、ウィンドウズで実行した例。

>>> import os
>>> print(os.sep)
\
>>> print('csv' + os.sep + 'result.csv')
csv\result.csv

2022年10月13日 (木)

[Python]累乗を求める

**演算子かpow関数を使う。pow関数はmathモジュールの関数ではなく、組み込み関数であることに注意。

>>> 2 ** 3
8
>>> 2 ** 0.5
1.4142135623730951
>>> 2 ** -4
0.0625
>>> -3 ** 3
-27
>>> pow(2, 3)
8
>>> pow(2, 0.5)
1.4142135623730951
>>> pow(2, -4)
0.0625
>>> pow(-3, 3)
-27

より以前の記事一覧

無料ブログはココログ