def upper_triangle(mat_a_vec_b): m_row, n_col = matrix.shape(mat_a_vec_b) for i_pivot in range(m_row - 1): pivot = float(mat_a_vec_b[i_pivot][i_pivot]) for j_row in range(i_pivot + 1, m_row): ratio = -(mat_a_vec_b[j_row][i_pivot] / pivot) matrix.row_mul_add(mat_a_vec_b, j_row, i_pivot, ratio, i_pivot)
def de_mean_matrix(A): # вернуть результат вычесления из каждого значения # в А среднього значения столбца # Результирующия матрица имеет нулевое среднее в кождом столбце nr, nc = mat.shape(A) colomn_means, _ = scale(A) return mat.make_matrix(nr, nc, lambda i, j: A[i][j] - colomn_means[j])
def gauss_elimination(mat_a, b): """ 1차 다원 연립 방정식 Ax = b에서 x를 구함 A : 계수행렬 b : 상수벡터 :param mat_a: :param b: :return: """ m_row, n_col = matrix.shape(mat_a) mat_a_vec_b = matrix.alloc_mat(m_row, n_col + 1) for i in range(m_row): for j in range(n_col): mat_a_vec_b[i][j] = mat_a[i][j] mat_a_vec_b[i][-1] = b[i] upper_triangle(mat_a_vec_b) x = back_substitution(mat_a_vec_b) del mat_a_vec_b[:] del mat_a_vec_b return x
def de_mean_matrix(A): """returns the result of subtracting from everty value in A the mean value of its column, the resulting matri has mean 0 in every column""" nr, nc = matrix.shape(A) column_means, __ = scale(A) return matrix.make_mtr(nr, nc, lambda i, j: A[i][j] - column_means[j])
def scale(data_matrix): # вернуть среднии и стандартные отклонения для каждого столпца num_rows, num_cols = mat.shape(data_matrix) mean = [mat.mean(get_column(data_matrix, j)) for j in range(num_rows)] stdevs = [ standart_deviation(get_column(data_matrix, j)) for j in range(num_cols) ] return means, stdevs
def scale(data_matrix): """returns the means and std dev of each col""" num_rows, num_cols = matrix.shape(data_matrix) means = [stats.mean(matrix.get_col(j,data_matrix)) for j in range(num_cols)] stdevs = [stats.stdev(matrix.get_col(j, data_matrix)) for j in range(num_cols)] return means, stdevs
def generate_mat_ai(mat_a): m_row, n_col = matrix.shape(mat_a) mat_ai = matrix.alloc_mat(m_row, n_col + m_row) for i_pivot in range(m_row): for j_col in range(n_col): mat_ai[i_pivot][j_col] = mat_a[i_pivot][j_col] mat_ai[i_pivot][n_col + i_pivot] = 1.0 return mat_ai
def correlation_matrix(data): # возвращает матрицу num_colums * num_colums где запись # в ячейке (i , j ) - это корреляция между столбцами i и j данных _, num_colums = mat.shape(data) # pfgbcm d vfnhbwt def matrix_entry(i, j): return ind.correlation(mat.get_collumn(data, i), mat.get_collumn(data, j)) return mat.make_matrix(num_colums, num_colums, matrix_entry)
def rescale(data_matrix): """rescales the input data_raw so that each column has mean 0 and stdev1""" means, stdevs = scale(data_matrix) def rescaled(i,j): if stdevs[j]>0: return (data_matrix[i][j] - means[j])/stdevs[j] else: data_matrix[i][j] num_rows, num_cols = matrix.shape(data_matrix) return matrix.make_mtr(num_rows, num_cols, rescaled)
def rescale(data): """ rescales the input data so that each column has mean 0 and standard deviation 1 leaves alone columns with no deviation """ means, stdevs = scale(data) def rescaled(i, j): if stdevs[j] > 0: return (data[i][j] - means[j]) / stdevs[j] else: return data[i][j] num_rows, num_cols = shape(data) return make_matrix(num_rows, num_cols, rescaled)
def gauss_elimination(mat_a, b): m_row, n_col = matrix.shape(mat_a) mat_a_vec_b = matrix.alloc_mat(m_row, n_col + 1) for i in range(m_row): for j in range(n_col): mat_a_vec_b[i][j] = mat_a[i][j] mat_a_vec_b[i][-1] = b[i] upper_triangle(mat_a_vec_b) x = back_substitution(mat_a_vec_b) del mat_a_vec_b[:] del mat_a_vec_b return x
def scale(data): num_rows, num_cols = shape(data) means = [mean(get_column(data, j)) for j in range(num_cols)] stdevs = [standard_deviation(get_column(data, j)) for j in range(num_cols)] return means, stdevs
import matrix matrix = matrix.Matrix() shape = [[0,0,0,0,0,0,0,0], [0,1,1,0,0,1,1,0], [1,0,0,1,1,0,0,1], [1,0,0,0,0,0,0,1], [1,0,0,0,0,0,0,1], [0,1,0,0,0,0,1,0], [0,0,1,0,0,1,0,0], [0,0,0,1,1,0,0,0]] matrix.shape(shape)