def get_matrix_cost(matrix: np.matrix) -> np.matrix: cost_matrix = matrix.copy() minimal_column = matrix.min(1)[:np.newaxis] minimal_column[minimal_column == np.inf] = 0 # Subtract minimal value of a row from matrix cost_matrix -= minimal_column minimal_row = cost_matrix.min(0) minimal_row[minimal_row == np.inf] = 0 # Subtract minimal value of a column from matrix cost_matrix -= minimal_row return cost_matrix
def __init__(self, vals: np.matrix): self.shift_factor = np.array(vals.min(1)).astype(float) self.scale_factor = np.array(vals.max(1) - self.shift_factor).astype(float) self.scale_factor = self.scale_factor + (self.scale_factor == 0).astype(float) self.shift_factor = self.shift_factor.reshape( self.shift_factor.shape[0], 1) self.scale_factor = self.scale_factor.reshape( self.scale_factor.shape[0], 1) self.scale_factor = 1.0
def get_matrix_cost(matrix: np.matrix, debug=False) -> tuple: matrix_mod = matrix.copy() minimal_column = matrix.min(1)[:np.newaxis] minimal_column[minimal_column == np.inf] = 0 cost = np.sum(minimal_column) # Subtract minimal value of a row from matrix matrix_mod -= minimal_column minimal_row = matrix_mod.min(0) minimal_row[minimal_row == np.inf] = 0 cost += np.sum(minimal_row) # Subtract minimal value of a column from matrix matrix_mod -= minimal_row if debug: print(f"Minimal column: {minimal_column}") print(f"Minimal column cost: {np.sum(minimal_column)}") print(f"Minimal row: {minimal_row}") print(f"Minimal row cost: {np.sum(minimal_row)}") return cost, matrix_mod
def ahp(item_no: np.matrix, m: np.matrix, w: np.matrix): """ ABC analysis according to Analytical Hierarchy Process (AHP) Arguments: item_no {[type]} -- list of item numbers m {[type]} -- ranking criteria Returns: [type] -- a matrix of item ranked and classified according to AHP """ fmin, fmax = m.min(0), m.max(0) norm = lambda i, v : (v-fmin[0,i])/(fmax[0,i]-fmin[0,i]) ahp = [[item_no[k,0],sum(w[i]*norm(i, m[k,i]) for i in range(0,4))] for k in range(0,len(m))] ahp = sorted(ahp,key=lambda x: x[1], reverse=True) # annotate ABC ABC.annotate_ABC(ahp) return ahp
def bounding_box(points: np.matrix): """Return a, b so that all points lay in bounding box spanned by a and b.""" return points.min(axis=0), points.max(axis=0)