Pyhton: NumPy Matrix dan Aljabar Linear

From OnnoWiki
Revision as of 07:27, 8 April 2023 by Onnowpurbo (talk | contribs) (→‎Quadrature)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

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]])
Screenshot from 2023-04-08 06-21-51.png
np.dot(a,b)
Screenshot from 2023-04-08 06-32-19.png
array([[37, 40],
       [85, 92]])


np.inner(a,b)
Screenshot from 2023-04-08 06-34-07.png
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]]))

Eig mengembalikan dua tupel: yang pertama adalah nilai eigen dan yang kedua adalah matriks yang kolomnya berupa dua vektor eigen.


Kami dapat membongkar tupel:

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

Kita ingin menghitung ∫03 x^4 dx=2434:

from scipy.integrate import quad
def f(x): return x**4
quad(f, 0., 3.)
(48.599999999999994, 5.39568389967826e-13)

Tuple yang dikembalikan menunjukkan (ans, error estimate).

Kita bisa mendapatkan jawaban yang sama jika kita menggunakan lambda sebagai gantinya:

quad(lambda x: x**4, 0, 3)
(48.599999999999994, 5.39568389967826e-13)

Referensi