Pyhton: NumPy Matrix dan Aljabar Linear
Sumber: http://www.bogotobogo.com/python/python_numpy_matrix_tutorial.php
Apa beda antara numpy dot() and inner()
Mari kita lihat ke 2D array:
import numpy as np a=np.array([[1,2],[3,4]]) b=np.array([[11,12],[13,14]])
np.dot(a,b)
array([[37, 40], [85, 92]])
np.inner(a,b)
array([[35, 41], [81, 95]])
NumPy Matrix
Bab-bab tentang NumPy telah menggunakan array (NumPy Array Basics A dan NumPy Array Basics B). Namun, untuk area tertentu seperti aljabar linier, kita mungkin ingin menggunakan matriks.
import numpy as np A = np.matrix([[1.,2], [3,4], [5,6]]) A
matrix([[1., 2.], [3., 4.], [5., 6.]])
Kami juga dapat menggunakan gaya Matlab dengan memberikan string bukan list:
import numpy as np B = np.matrix("1.,2; 3,4; 5,6") B
matrix([[1., 2.], [3., 4.], [5., 6.]])
Vector sebagai matrix
Vektor ditangani sebagai matriks dengan satu baris atau satu kolom:
x = np.matrix("10., 20.") x
matrix(10., 20.)
x.T
matrix([[10.], [20.]])
Berikut adalah contoh perkalian matriks dan vektor:
x = np.matrix("4.;5.") x
matrix([[4.], [5.]]) A = np.matrix([[1.,2], [3,4], [5,6]]) A
matrix([[1., 2.], [3., 4.], [5., 6.]]) A*x
matrix([[14.], [32.], [50.]])
Untuk vektor, pengindeksan memerlukan dua indeks:
print( x[0,0], x[1,0] )
4.0 5.0
Catatan
Meskipun np.matrix mengambil bentuk matriks nyata dan terlihat bagus, biasanya, untuk sebagian besar kasus, array sudah cukup baik.
Rank
import numpy as np A = np.ones((4,3)) A
array([[ 1., 1., 1.], [ 1., 1., 1.], [ 1., 1., 1.], [ 1., 1., 1.]])
# np.rank(A) # rank sudah sudah tidak ada NumPy # 2
Perhatikan bahwa pangkat array bukanlah pangkat matriks dalam aljabar linier (dimensi ruang kolom) tetapi jumlah subskrip yang diperlukan!
Skalar memiliki rank 0:
x = np.array(10) x
array(10)
# np.rank(x) # rank sudah sudah tidak ada NumPy # 0
Menghitung rank matrix
from numpy.linalg import matrix_rank matrix_rank(np.eye(4)) # Full rank matrix
4
I=np.eye(4); I[-1,-1] = 0. # rank deficient matrix matrix_rank(I)
3
matrix_rank(np.ones((4,))) # 1 dimension - rank 1 unless all 0
1
matrix_rank(np.zeros((4,)))
0
NumPy mendukung array dari dimensi apa pun seperti peringkat 3 (2x2x2):
A = np.ones((2,2,2)) A
array([[[1., 1.], [1., 1.]], [[1., 1.], [1., 1.]]])
A[1,0,1]
1.0
dot product
A = np.array([[1,2],[3,4]]) A
array([[1, 2], [3, 4]])
b = np.array([10, 20]) b
array([10, 20])
ans = np.dot(A,b) ans
array([ 50, 110])
Ax = b : numpy.linalg
Kita akan solve Ax = b:
import numpy as np from numpy.linalg import solve A = np.array([[1,2],[3,4]]) A
array([[1, 2], [3, 4]])
b = np.array([10, 20]) b
array([10, 20])
x = solve(A,b) x
array([0., 5.])
Eigen Value dan Vector
>>> import numpy as np >>> from numpy.linalg import eig >>> A = np.array([[1,2],[3,4]]) >>> eig(A) (array([-0.37228132, 5.37228132]), array([[-0.82456484, -0.41597356], [ 0.56576746, -0.90937671]]))
The eig returns two tuples: the first one is the eigen values and the second one is a matrix whose columns are the two eigen vectors.
We can unpack the tuples:
>>> eigen_val, eigen_vec = eig(A) >>> eigen_val array([-0.37228132, 5.37228132]) >>> eigen_vec array([[-0.82456484, -0.41597356], [ 0.56576746, -0.90937671]])
Quadrature
We want to solve ∫30x4dx=2434:
>>> from scipy.integrate import quad >>> def f(x): ... return x**4 ... >>> quad(f, 0., 3.) (48.599999999999994, 5.39568389967826e-13)
The returned tuple indicates (ans, error estimate).
We can get the same answer if we use lambda instead:
>>> quad(lambda x: x**4, 0, 3) (48.599999999999994, 5.39568389967826e-13)