У овом чланку ћемо научити о Питхон матрицама користећи угнежђене листе и НумПи пакет.
Матрица је дводимензионална структура података где су бројеви поређани у редове и колоне. На пример:
Ова матрица је матрица 3к4 (изговара се „три по четири“) јер има 3 реда и 4 колоне.
Питхон Матрик
Питхон нема уграђени тип за матрице. Међутим, листу листе можемо третирати као матрицу. На пример:
A = ((1, 4, 5), (-5, 8, 9))
Ову листу листе можемо третирати као матрицу која има 2 реда и 3 колоне.
Обавезно сазнајте више о Питхон листама пре него што наставите са овим чланком.
Погледајмо како се ради са угнежђеном листом.
A = ((1, 4, 5, 12), (-5, 8, 9, 0), (-6, 7, 11, 19)) print("A =", A) print("A(1) =", A(1)) # 2nd row print("A(1)(2) =", A(1)(2)) # 3rd element of 2nd row print("A(0)(-1) =", A(0)(-1)) # Last element of 1st Row column = (); # empty list for row in A: column.append(row(2)) print("3rd column =", column)
Када покренемо програм, излаз ће бити:
А = ((1, 4, 5, 12), (-5, 8, 9, 0), (-6, 7, 11, 19)) А (1) = (-5, 8, 9, 0) А (1) (2) = 9 А (0) (- 1) = 12 3. колона = (5, 9, 11)
Ево још неколико примера повезаних са Питхон матрицама помоћу угнежђених листа.
- Додајте две матрице
- Транспонујте матрицу
- Помножите две матрице
Коришћење угнежђених листа као матрице делује за једноставне рачунске задатке, међутим, постоји бољи начин рада са матрицама у Питхону помоћу пакета НумПи.
НумПи Арраи
НумПи је пакет за научно рачунање који има подршку за моћан Н-димензиони низ објеката. Пре него што будете могли да користите НумПи, потребно је да га инсталирате. За више информација,
- Посета: Како инсталирати НумПи?
- Ако користите Виндовс, преузмите и инсталирајте анацонда дистрибуцију Питхона. Долази са НумПи и другим неколико пакета који се односе на науку о подацима и машинско учење.
Једном када је НумПи инсталиран, можете га увести и користити.
НумПи пружа вишедимензионални низ бројева (који је заправо објекат). Узмимо пример:
import numpy as np a = np.array((1, 2, 3)) print(a) # Output: (1, 2, 3) print(type(a)) # Output:
Као што видите, позива се класа низа НумПи ndarray
.
Како створити НумПи низ?
Постоји неколико начина за стварање НумПи низова.
1. Низ целобројних, пловећих и сложених бројева
import numpy as np A = np.array(((1, 2, 3), (3, 4, 5))) print(A) A = np.array(((1.1, 2, 3), (3, 4, 5))) # Array of floats print(A) A = np.array(((1, 2, 3), (3, 4, 5)), dtype = complex) # Array of complex numbers print(A)
Када покренете програм, излаз ће бити:
((1 2 3) (3 4 5)) ((1.1 2. 3.) (3. 4. 5.)) ((1. + 0.ј 2. + 0.ј 3. + 0.ј) (3. + 0.ј 4. + 0.ј 5. + 0.ј))
2. Низ нула и јединица
import numpy as np zeors_array = np.zeros( (2, 3) ) print(zeors_array) ''' Output: ((0. 0. 0.) (0. 0. 0.)) ''' ones_array = np.ones( (1, 5), dtype=np.int32 ) // specifying dtype print(ones_array) # Output: ((1 1 1 1 1))
Овде смо одредили dtype
32 бита (4 бајта). Стога овај низ може узимати вредности од до .-2-31
2-31-1
3. Коришћење аранге () и схапе ()
import numpy as np A = np.arange(4) print('A =', A) B = np.arange(12).reshape(2, 6) print('B =', B) ''' Output: A = (0 1 2 3) B = (( 0 1 2 3 4 5) ( 6 7 8 9 10 11)) '''
Сазнајте више о другим начинима креирања НумПи низа.
Матричне операције
Изнад смо вам дали 3 примера: сабирање две матрице, множење две матрице и транспоновање матрице. Раније смо користили угнежђене листе за писање тих програма. Погледајмо како можемо да урадимо исти задатак помоћу НумПи низа.
Сабирање две матрице
Користимо +
оператор да бисмо додали одговарајуће елементе две НумПи матрице.
import numpy as np A = np.array(((2, 4), (5, -6))) B = np.array(((9, -3), (3, 6))) C = A + B # element wise addition print(C) ''' Output: ((11 1) ( 8 0)) '''
Множење две матрице
Да бисмо помножили две матрице, користимо dot()
методу. Сазнајте више о томе како нумпи.дот ради.
Напомена: *
користи се за множење низова (множење одговарајућих елемената два низа), а не за умножавање матрице.
import numpy as np A = np.array(((3, 6, 7), (5, -3, 0))) B = np.array(((1, 1), (2, 1), (3, -3))) C = A.dot(B) print(C) ''' Output: (( 36 -12) ( -1 2)) '''
Транспозиција матрице
За израчунавање транспоновања матрице користимо нумпи.транспосе.
import numpy as np A = np.array(((1, 1), (2, 1), (3, -3))) print(A.transpose()) ''' Output: (( 1 2 3) ( 1 1 -3)) '''
Као што видите, НумПи нам је много олакшао задатак.
Приступити елементима матрице, редовима и колонама
Access matrix elements
Similar like lists, we can access matrix elements using index. Let's start with a one-dimensional NumPy array.
import numpy as np A = np.array((2, 4, 6, 8, 10)) print("A(0) =", A(0)) # First element print("A(2) =", A(2)) # Third element print("A(-1) =", A(-1)) # Last element
When you run the program, the output will be:
A(0) = 2 A(2) = 6 A(-1) = 10
Now, let's see how we can access elements of a two-dimensional array (which is basically a matrix).
import numpy as np A = np.array(((1, 4, 5, 12), (-5, 8, 9, 0), (-6, 7, 11, 19))) # First element of first row print("A(0)(0) =", A(0)(0)) # Third element of second row print("A(1)(2) =", A(1)(2)) # Last element of last row print("A(-1)(-1) =", A(-1)(-1))
When we run the program, the output will be:
A(0)(0) = 1 A(1)(2) = 9 A(-1)(-1) = 19
Access rows of a Matrix
import numpy as np A = np.array(((1, 4, 5, 12), (-5, 8, 9, 0), (-6, 7, 11, 19))) print("A(0) =", A(0)) # First Row print("A(2) =", A(2)) # Third Row print("A(-1) =", A(-1)) # Last Row (3rd row in this case)
When we run the program, the output will be:
A(0) = (1, 4, 5, 12) A(2) = (-6, 7, 11, 19) A(-1) = (-6, 7, 11, 19)
Access columns of a Matrix
import numpy as np A = np.array(((1, 4, 5, 12), (-5, 8, 9, 0), (-6, 7, 11, 19))) print("A(:,0) =",A(:,0)) # First Column print("A(:,3) =", A(:,3)) # Fourth Column print("A(:,-1) =", A(:,-1)) # Last Column (4th column in this case)
When we run the program, the output will be:
A(:,0) = ( 1 -5 -6) A(:,3) = (12 0 19) A(:,-1) = (12 0 19)
If you don't know how this above code works, read slicing of a matrix section of this article.
Slicing of a Matrix
Slicing of a one-dimensional NumPy array is similar to a list. If you don't know how slicing for a list works, visit Understanding Python's slice notation.
Узмимо пример:
import numpy as np letters = np.array((1, 3, 5, 7, 9, 7, 5)) # 3rd to 5th elements print(letters(2:5)) # Output: (5, 7, 9) # 1st to 4th elements print(letters(:-5)) # Output: (1, 3) # 6th to last elements print(letters(5:)) # Output:(7, 5) # 1st to last elements print(letters(:)) # Output:(1, 3, 5, 7, 9, 7, 5) # reversing a list print(letters(::-1)) # Output:(5, 7, 9, 7, 5, 3, 1)
Сада, да видимо како можемо исећи матрицу.
import numpy as np A = np.array(((1, 4, 5, 12, 14), (-5, 8, 9, 0, 17), (-6, 7, 11, 19, 21))) print(A(:2, :4)) # two rows, four columns ''' Output: (( 1 4 5 12) (-5 8 9 0)) ''' print(A(:1,)) # first row, all columns ''' Output: (( 1 4 5 12 14)) ''' print(A(:,2)) # all rows, second column ''' Output: ( 5 9 11) ''' print(A(:, 2:5)) # all rows, third to the fifth column '''Output: (( 5 12 14) ( 9 0 17) (11 19 21)) '''
Као што видите, коришћење НумПи-а (уместо угнежђених листа) олакшава рад са матрицама, а чак нисмо ни огребали о основама. Предлажемо вам да детаљно истражите пакет НумПи, посебно ако покушавате да користите Питхон за науку о подацима / аналитику.
НумПи ресурси који би вам могли бити корисни:
- НумПи Туториал
- НумПи Референце