-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmatrix.py
126 lines (90 loc) · 3.05 KB
/
matrix.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
from random import random
class Matrix:
def __init__(self,
rows: int,
cols: int,):
self.rows = rows
self.cols = cols
self.data = []
for row in range(rows):
arr = []
for col in range(cols):
arr.append(0)
self.data.append(arr)
def print(self):
print('==============================')
for index, row in enumerate(self.data):
print(f'{row}')
def map(self, func):
self.data = [
[func(col, r, c) for c, col in enumerate(row)] for r, row in enumerate(self.data)
]
@staticmethod
def static_map(matrix_a, func):
matrix_a.data = [
[func(col, r, c) for c, col in enumerate(row)] for r, row in enumerate(matrix_a.data)
]
return matrix_a
@staticmethod
def array_to_matrix(arr: list):
matrix = Matrix(len(arr), 1)
def func(elm, i, j):
return arr[i]
matrix.map(func)
return matrix
@staticmethod
def matrix_to_array(matrix):
arr = []
def func(elm, i, j):
return arr.append(elm)
matrix.map(func)
return arr
def randomize(self):
def func(elm, index_1, index_2):
return random() * 2 - 1
self.map(func)
@staticmethod
def transpose(matrix_a):
matrix = Matrix(matrix_a.cols, matrix_a.rows)
def func(elm, index_1, index_2):
return matrix_a.data[index_2][index_1]
matrix.map(func)
return matrix
@staticmethod
def scaled_multiply(matrix_a, scaled):
matrix = Matrix(matrix_a.rows, matrix_a.cols)
def sum_arrays(elm, index_1, index_2):
return matrix_a.data[index_1][index_2] * scaled
matrix.map(sum_arrays)
return matrix
@staticmethod
def hadamard(matrix_a, matrix_b):
matrix = Matrix(matrix_a.rows, matrix_a.cols)
def func(elm, index_1, index_2):
return matrix_a.data[index_1][index_2] * matrix_b.data[index_1][index_2]
matrix.map(func)
return matrix
@staticmethod
def subtract(matrix_a, matrix_b):
matrix = Matrix(matrix_a.rows, matrix_a.cols)
def func(elm, index_1, index_2):
return matrix_a.data[index_1][index_2] - matrix_b.data[index_1][index_2]
matrix.map(func)
return matrix
@staticmethod
def add(matrix_a, matrix_b):
matrix = Matrix(matrix_a.rows, matrix_a.cols)
def func(elm, index_1, index_2):
return matrix_a.data[index_1][index_2] + matrix_b.data[index_1][index_2]
matrix.map(func)
return matrix
@staticmethod
def multiply(matrix_a, matrix_b):
matrix = Matrix(matrix_a.rows, matrix_b.cols)
def func(elm, i, j):
sum_all_multiply = 0
for k in range(matrix_a.cols):
sum_all_multiply += matrix_a.data[i][k] * matrix_b.data[k][j]
return sum_all_multiply
matrix.map(func)
return matrix