def run_model(consumption: numpy.matrix, production: numpy.matrix, emissions: numpy.matrix, final_demand: numpy.matrix=None) -> numpy.matrix: """ :param consumption: U :param production: V :param emissions: e :return: """ i = numpy.identity(len(consumption)) q = get_row_sum(production.source_data.elements) g = get_col_sum(production.source_data.elements) if final_demand is None: y = get_row_sum(consumption.source_data.elements) else: y = final_demand b = matrix_divide(consumption.source_data.elements, diagonal(g)) d = matrix_divide(production.source_data.elements, diagonal(q)) a = matrix_multiply(b, d) money_part = matrix_multiply(inv(i - a), y) return element_wise_divide(emissions.source_data.elements, money_part)
def row_scaling(a: numpy.matrix, row_totals: numpy.matrix, e: numpy.matrix) -> numpy.matrix: r_hat = matrix_divide(diagonal(row_totals), diagonal(matrix_multiply(a, e))) return r_hat
def column_scaling(a: numpy.matrix, column_totals: numpy.matrix, e: numpy.matrix) -> numpy.matrix: s_hat = matrix_divide(diagonal(column_totals), diagonal(matrix_multiply(e.T, a))) return s_hat
def test_simple_float(self): a = numpy.matrix([[3.0, 4.0], [10.0, 2.0]]) b = numpy.matrix([[4.0, 7.0], [2.0, 6.0]]) # inv(b) = [[0.6, -0.7], [-0.2, 0.4]] # [3 4 * [ 0.6 -0.7 # 10 2] -0.2 0.4] d = matrix_divide(a, b) numpy.testing.assert_allclose(d, [[1., -0.5], [5.6, -6.2]])
def test_type(self): a = numpy.matrix([[3.0, 4.0], [10.0, 2.0]]) b = numpy.matrix([[4.0, 7.0], [2.0, 6.0]]) d = matrix_divide(a, b) self.assertIs(type(d), numpy.matrix)