Hasznos lehet több kód futtatása esetén mindegyik előtt újraindítani a kernelt (menü: Kernel -> Restart, vagy Kernel -> Restart & Clear Output). A kódok néhol különbözhetnek a könyvbeliektől és olyan sorokat is tartalmazhatnak, melyek nem fértek be a könyvbe.
l = [1, 2, 3]
sum = 0
for i in l:
sum += i
print(sum)
6
l = []
sum = 0
for i in l:
sum += i
print(sum)
0
l = set()
sum = 0
for i in l:
sum += i
print(sum)
0
import numpy as np
a = [2, 3, 6]
b = [3, -6, 2]
c = [1, 0, 1]
# listákkal definiált vektorok is szorozhatók
np.dot(a, b)
0
# 1-D tömbként definiált vektorok is szorozhatók
A = np.array(a)
B = np.array(b)
np.dot(A, B)
0
np.cross(a, b)
array([ 42, 14, -21])
np.dot(_, c)
21
import numpy as np
import math
u = np.array([2, 3, 4, 14])
w = np.array([0, 3, 6, -2])
u, w
(array([ 2, 3, 4, 14]), array([ 0, 3, 6, -2]))
nu = np.linalg.norm(u)
nw = np.linalg.norm(w)
nu, nw
(15.0, 7.0)
d = np.dot(u, w)
d
5
d/nu/nw
0.047619047619047616
math.acos(_)
1.5231592641704934
x = [1, 2, 3, 4, 5]
y = [3, 2, 4, 6, 5]
z = [5, 6, 4, 2, 3]
# 1. pearsonr
from scipy.stats import pearsonr
pearsonr(x, y)
r, _ = pearsonr(x, y)
r
0.8
pearsonr(x, z)[0]
-0.8
# 2. linregress
from scipy.stats import linregress
lr = linregress(x, y)
lr.rvalue
0.8
lr # az csak véletlen, hogy a regressziós egyenes iránytangense (slope) is 0.8
LinregressResult(slope=0.8, intercept=1.5999999999999996, rvalue=0.8, pvalue=0.10408803866182778, stderr=0.3464101615137754, intercept_stderr=1.1489125293076055)
linregress(x, z).rvalue
-0.8
# 3. korrelációs mátrix
import numpy as np
xyz = np.array([x, y, z]) # egy tömbbe tesszük
xyz
array([[1, 2, 3, 4, 5],
[3, 2, 4, 6, 5],
[5, 6, 4, 2, 3]])
np.corrcoef(xyz)
array([[ 1. , 0.8, -0.8],
[ 0.8, 1. , -1. ],
[-0.8, -1. , 1. ]])
import sympy
a = sympy.Matrix([[2,1,1],[0,2,1],[0,4,2]])
a
a.rref() # a redukált lépcsős alak és a bázisoszlopok indexeinek listája
(Matrix([ [1, 0, 1/4], [0, 1, 1/2], [0, 0, 0]]), (0, 1))
# csak a mátrix
a.rref()[0]
# a bázisoszlopok indexei (a Python konvencióinak megfelelően az első oszlop indexe 0)
a.rref()[1]
(0, 1)
A könyvben nem szerepel
import numpy as np
from scipy.linalg import null_space
a = np.array([[1,2,2,-1], [1,2,4,0], [3,6,2,-5]])
null_space(a)
array([[-0.93665071, -0.02709652],
[ 0.24090271, 0.67391469],
[ 0.11371132, -0.33018321],
[-0.22742264, 0.66036643]])
from sympy import *
A = Matrix(a)
A
A.nullspace()
[Matrix([ [-2], [ 1], [ 0], [ 0]]), Matrix([ [ 2], [ 0], [-1/2], [ 1]])]
A.nullspace()[0]
A.nullspace()[1]
import numpy as np
a = np.array([[1, 2, 3], [4, 5, 7]])
a
array([[1, 2, 3],
[4, 5, 7]])
# 0-tól indexelünk
a[0, 0]
1
a[1, 2]
7
# utosló sor, utolsó oszlop eleme
a[-1, -1]
7
a[1, :] # 2. sor, indexe 1, vektor
array([4, 5, 7])
_.ndim # a vektor 1 dimenziós tömb
0
a[:,0] # 1. oszlop, ez is vektor!
array([1, 4])
_.ndim
0
a[:, [0]] # az első oszlop, mint oszlopvektor 2 dimenziós tömb
array([[1],
[4]])
_.ndim # az oszlopvektor 2 dimenziós tömb
0
a = np.diag([1, 2, 4]) # diagonális mátrix
a
array([[1, 0, 0],
[0, 2, 0],
[0, 0, 4]])
print(a)
[[1 0 0] [0 2 0] [0 0 4]]
import numpy as np
A = np.array([[1, 1], [2, 1], [0, 3]])
B = np.array([[1, 1, 2], [2, 1, 0]])
A
array([[1, 1],
[2, 1],
[0, 3]])
B
array([[1, 1, 2],
[2, 1, 0]])
A @ B
array([[3, 2, 2],
[4, 3, 4],
[6, 3, 0]])
import numpy as np
A = np.array([1,0])
B = np.array([[1]])
C = np.array([[2,1],[0,3]])
D = np.array([[1],[1]])
np.block([[A,B],[C,D]])
array([[1, 0, 1],
[2, 1, 1],
[0, 3, 1]])
import numpy as np
# Vektorok
u = np.array([1, 0, 2])
v = np.array([3, 2, 1])
u, v
(array([1, 0, 2]), array([3, 2, 1]))
# 3x1-es mátrixok
U = np.array([[1, 0, 2]]).T
V = np.array([[3, 2, 1]]).T
U, V
(array([[1],
[0],
[2]]),
array([[3],
[2],
[1]]))
u @ v # skalárszorzat
5
np.dot(u, v)
5
U @ V.T #diadikus szorzat
array([[3, 2, 1],
[0, 0, 0],
[6, 4, 2]])
U.T @ V # 1x1-es mátrix, azaz 2 dimenziós tömb
array([[5]])
# skalárként kezeli a * művelettel
U.T @ V * np.diag([1, 1])
array([[5, 0],
[0, 5]])
import numpy as np
np.eye(2)
array([[1., 0.],
[0., 1.]])
np.diag([1, 1])
array([[1, 0],
[0, 1]])
np.identity(2)
array([[1., 0.],
[0., 1.]])
np.eye(2, 3)
array([[1., 0., 0.],
[0., 1., 0.]])
# a főátló fölött 1-gyel
np.eye(3, 3, 1, dtype='int')
array([[0, 1, 0],
[0, 0, 1],
[0, 0, 0]])
# a főátló alatt 2-vel
np.eye(4, 4, -2, dtype='int')
array([[0, 0, 0, 0],
[0, 0, 0, 0],
[1, 0, 0, 0],
[0, 1, 0, 0]])
import numpy as np
# a 0 és 2 indexű sorok cseréje (S_1 <-> S_3)
A = np.eye(3)
A[(0,2),:] = A[(2,0),:]
A
array([[0., 0., 1.],
[0., 1., 0.],
[1., 0., 0.]])
# a második sor beszorzása 5-tel (5*S_2)
B = np.eye(3)
B[1,:] = 5*B[1,:]
B
array([[1., 0., 0.],
[0., 5., 0.],
[0., 0., 1.]])
# a harmadik sor 2-szeresének hozzáadása az első sorhoz (S_1 + 2*S_3)
C = np.eye(3)
C[0,:] += 2*C[2,:]
C
array([[1., 0., 2.],
[0., 1., 0.],
[0., 0., 1.]])
import numpy as np
A=np.array([[1, 2], [3, 4]])
A
array([[1, 2],
[3, 4]])
# A vec-függvény a Fortran-sorrendű reshape
# "F" = Fortran sorrend
# ha a sorok száma -1, akkor kiszámolja a sorok valódi számát, ami most 4
A.reshape((-1, 1), order="F")
array([[1],
[3],
[2],
[4]])
# a sorok száma 4, az oszlopok száma 1
_.shape
()
B=np.array([[1, 0], [2, 1]])
B
array([[1, 0],
[2, 1]])
np.kron(A, B)
array([[1, 0, 2, 0],
[2, 1, 4, 2],
[3, 0, 4, 0],
[6, 3, 8, 4]])
import numpy as np
from scipy.linalg import solve_sylvester
A=np.array([[0, 1], [1, 0]])
B=np.array([[1, 1], [0, 2]])
C=np.array([[3, 7], [3, 5]])
solve_sylvester(A, B, C)
array([[1.5, 2.5],
[1.5, 0.5]])
import numpy as np
from scipy.linalg import lu
a = np.array(
[[-1, 6, 1,-7, 4],
[ 1, 4, 4,-7, 5],
[ 4,-8, 4, 8,-4],
[ 3,-6, 8, 6,-8]])
p, l, u = lu(a)
# a == p @ l @ u
print(p)
print(l)
print(u)
[[0. 0. 0. 1.] [0. 1. 0. 0.] [1. 0. 0. 0.] [0. 0. 1. 0.]] [[ 1. 0. 0. 0. ] [ 0.25 1. 0. 0. ] [ 0.75 0. 1. 0. ] [-0.25 0.66666667 0. 1. ]] [[ 4. -8. 4. 8. -4.] [ 0. 6. 3. -9. 6.] [ 0. 0. 5. 0. -5.] [ 0. 0. 0. 1. -1.]]
a == p @ l @ u
array([[ True, True, True, True, True],
[ True, True, True, True, True],
[ True, True, True, True, True],
[ True, True, True, True, True]])
# nem lebegőpontos számolás
# itt A == P.T @ L @ U
from sympy import Matrix, eye
#konverzió numpy -> sympy
A = Matrix(a)
A
L, U, p = A.LUdecomposition()
L
U
p # a sorcserék párjai
[[2, 3]]
# a permutáló mátrix konstrukciója a sorcserékből
I = eye(A.rows)
P = I.permuteFwd(p)
P # permutálómátrix p-ből
P.T @ L @ U
_ == A
False
Miéert kaptunk az előzőtől különböző P, L, U mátrixokat?
Itt szükségtelen a legnagyobb abszolút értékű elemmel eliminálni, mert a számításaink pontosak. Elég csak akkor sort cserélni, ha a főátlóban megjelenik egy 0, de alatta van nemnulla elem, mert azt másként nem tudnánk eliminálni.
import numpy as np
a = np.array(
[[2, 2, -3],
[2, 2, -4],
[4, 5, -6]])
a
array([[ 2, 2, -3],
[ 2, 2, -4],
[ 4, 5, -6]])
np.linalg.det(a)
2.0
from sympy import *
x, y = symbols('x, y')
A = Matrix([x, y, -y, x]).reshape(2, 2)
A
A.det()
det(A)
import numpy as np
x = np.array([2, 3, 4])
V = np.vander(x)
V
array([[ 4, 2, 1],
[ 9, 3, 1],
[16, 4, 1]])
np.linalg.det(V)
-2.0
# egyesek az első oszlopban
np.fliplr(V) # flip left -> right
array([[ 1, 2, 4],
[ 1, 3, 9],
[ 1, 4, 16]])
# egyesek az első sorban
np.fliplr(V).T
array([[ 1, 1, 1],
[ 2, 3, 4],
[ 4, 9, 16]])
from sympy import *
x, y, z = symbols('x y z')
A = Matrix(
[[cos(x), -sin(x), 0],
[sin(x), cos(x), 0],
[0, 0, 1]])
A
B = A.subs(x, pi/3)
B
v = Matrix(3, 1, [1, 1, 2])
B * v
import numpy as np
a = np.array(
[[0, 1, 1],
[0, 2, 0],
[0, 0, 2]])
c, l = np.linalg.eig(a)
c
array([0., 2., 2.])
l
array([[1. , 0.4472136 , 0.4472136 ],
[0. , 0.89442719, 0. ],
[0. , 0. , 0.89442719]])
# szimbolikus csomaggal:
import sympy as sp
A = sp.Matrix(a)
A
# {saj.ért.: multipl.}
A.eigenvals()
{2: 2, 0: 1}
A.eigenvects()
[(0, 1, [Matrix([ [1], [0], [0]])]), (2, 2, [Matrix([ [1/2], [ 1], [ 0]]), Matrix([ [1/2], [ 0], [ 1]])])]
len(_)
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) Cell In[102], line 1 ----> 1 len(_) TypeError: object of type 'numpy.float64' has no len()
# a 0-hoz tartozó sajátvektor
A.eigenvects()[0][2][0]
# a 2-höz tartozó sajátalteret kifeszítő
# első sajátvektor
A.eigenvects()[1][2][0]
# a 2-höz tartozó sajátalteret kifeszítő
# második sajátvektor
A.eigenvects()[1][2][1]
from sympy import *
a = Rational(1,2) * Matrix(
[[1, -sqrt(3)],
[sqrt(3), 1]])
# sajátérték: multiplicitással
a.eigenvals()
{1/2 - sqrt(3)*I/2: 1, 1/2 + sqrt(3)*I/2: 1}
# sajátértékek listája
list(a.eigenvals())
[1/2 - sqrt(3)*I/2, 1/2 + sqrt(3)*I/2]
list(a.eigenvals())[0]
list(a.eigenvals())[1]
# sajátvektorok
v = a.eigenvects()
v
[(1/2 - sqrt(3)*I/2, 1, [Matrix([ [-sqrt(3)/3 + 2*sqrt(3)*(1/2 - sqrt(3)*I/2)/3], [ 1]])]), (1/2 + sqrt(3)*I/2, 1, [Matrix([ [-sqrt(3)/3 + 2*sqrt(3)*(1/2 + sqrt(3)*I/2)/3], [ 1]])])]
v[0][2][0].simplify()
v[0][2][0]
v[1][2][0].simplify()
v[1][2][0]
from sympy import *
A = Matrix(3, 3,
[6, -1, -3,
-1, 5, 2,
2, -1, 1])
A
A.eigenvects()
[(4, 3, [Matrix([ [ 1], [-1], [ 1]])])]
A.jordan_form()
(Matrix([ [-1, 2, 1], [ 1, -1, 0], [-1, 2, 0]]), Matrix([ [4, 1, 0], [0, 4, 1], [0, 0, 4]]))
A.jordan_form()[0]
A.jordan_form()[1]
from sympy import *
A = Matrix(3, 3,
[2, -3, 2,
4, 10, -4,
4, 6, 0])
A
A.eigenvects()
[(4, 3, [Matrix([ [-3/2], [ 1], [ 0]]), Matrix([ [1], [0], [1]])])]
A.jordan_form()
(Matrix([ [-2, 1, -3/2], [ 4, 0, 1], [ 4, 0, 0]]), Matrix([ [4, 1, 0], [0, 4, 0], [0, 0, 4]]))
A.jordan_form()[0]
A.jordan_form()[1]
import numpy as np
from sklearn.linear_model import LinearRegression
x = np.array([[0, 0],[0, 1], [1, 0],[1, 1]])
x
array([[0, 0],
[0, 1],
[1, 0],
[1, 1]])
z = np.array([4, 0, 3, 3])
z
array([4, 0, 3, 3])
lr = LinearRegression()
lr.fit(x,z)
LinearRegression()In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
LinearRegression()
lr.coef_
array([ 1., -2.])
lr.intercept_
3.0
#numpy.linalg.pinv() függvény
import numpy as np
B = np.array(
[[0, 1],
[1, 1],
[1, 0]])
Bplus = np.linalg.pinv(B)
print(Bplus)
[[-0.33333333 0.33333333 0.66666667] [ 0.66666667 0.33333333 -0.33333333]]
# sympy.pinv() metódus
import sympy as sy
B = sy.Matrix(B)
B
B.pinv()
C = sy.Matrix(
[[1, 0, 1],
[0, 1, 1]])
C
C.pinv()
M = B @ C
M
M.pinv()
import sympy as sy
A = sy.Matrix(
[[0, 1, 1],
[1, 1, 2],
[1, 0, 1]])
A
b = sy.Matrix([3, 2, 2])
b
A.pinv_solve(b)
# a sortérbe eső optimális megoldás
A.pinv_solve(b, arbitrary_matrix = sy.Matrix([0,0,0]))
# az összes optimális megoldás
t = sy.symbols("t")
A.pinv_solve(b, arbitrary_matrix = sy.Matrix([3*t,0,0]))
import sympy as sy
b1 = sy.Matrix([3, 6, 2]); b1
b2 = sy.Matrix([1, 9,-4]); b2
B = [b1, b2]
B
[Matrix([ [3], [6], [2]]), Matrix([ [ 1], [ 9], [-4]])]
gs = sy.GramSchmidt(B)
sy.init_printing() # a pprint függvényhez a grafikus outputhoz
for i in gs:
sy.pprint(i, use_unicode=True)
⎡3⎤ ⎢ ⎥ ⎢6⎥ ⎢ ⎥ ⎣2⎦ ⎡-2⎤ ⎢ ⎥ ⎢3 ⎥ ⎢ ⎥ ⎣-6⎦
GS = sy.GramSchmidt(B, True)
for i in GS:
sy.pprint(i, use_unicode=True)
⎡3/7⎤ ⎢ ⎥ ⎢6/7⎥ ⎢ ⎥ ⎣2/7⎦ ⎡-2/7⎤ ⎢ ⎥ ⎢3/7 ⎥ ⎢ ⎥ ⎣-6/7⎦
gs[0].dot(gs[1]) # merőlegesek egymásra
GS[0].norm(), GS[1].norm() # egységvektorok
import sympy as sy
A = sy.Matrix(
[[1, 3, 6],
[1,-1, 2],
[1, 3, 2],
[1,-1,-2]])
A
A.QRdecomposition()
[Q, R] = A.QRdecomposition()
Q
R
Q @ R == A
True
import numpy as np
from numpy.linalg import norm
v = np.array([[3, -4]])
norm(v)
norm(v, 1)
norm(v, np.inf)
w = np.array([3, 4, 5])
norm(w, 3)
import numpy as np
from numpy.linalg import norm, svd
A = np.array(
[[2, -2],
[1, 2]])
# Fobenius-norma
norm(A)
norm(A, 'fro')
# 2-norma = sigma_1
norm(A, 2)
svd(A)[1]
array([3., 2.])
# a legnagyobb szinguláris érték
svd(A)[1][0]
# 1-norma
norm(A, 1)
# oo-norma
norm(A, np.inf)
import numpy as np
from numpy.linalg import cond
a = np.array(
[[6.73, -8.97],
[4.79, -6.39]])
cond(a)
cond(a, 1)
13 % 5 # 13 mod 5 = 3
-13 % 5
13 // 5 # egészosztás
-13 // 5
divmod(13, 5) # mindkettő
divmod(-13, 5)
z = 3 - 1j # !
z
(3-1j)
w = 2 + 1j # j nem elég
w
(2+1j)
z * w
(7+1j)
z / w
(1-1j)
z**2
(8-6j)
z.real # valós rész
z.imag # imaginárius rész
z.conjugate() # konjugált
(3+1j)
# csomag komplexekhez
from cmath import *
polar(1j)
exp(1j*pi) # = -1
(-1+1.2246467991473532e-16j)