def expr_as_np_array(cvx_expr: Expression) -> np.ndarray: """ Convert cvxpy expression into a numpy array. :param cvx_expr: The cvxpy expression to be converted. :return: The numpy array of the cvxpy expression. """ if cvx_expr.is_scalar(): return np.array(cvx_expr) if len(cvx_expr.shape) == 1: return np.array(list(cvx_expr)) # Then cvx_expr is a 2-D array. rows = [] for i in range(cvx_expr.shape[0]): row = [cvx_expr[i, j] for j in range(cvx_expr.shape[1])] rows.append(row) arr = np.array(rows) return arr
def promote(expr: Expression, shape: Tuple[int, ...]): """ Promote a scalar expression to a vector/matrix. Parameters ---------- expr : Expression The expression to promote. shape : tuple The shape to promote to. Raises ------ ValueError If ``expr`` is not a scalar. """ expr = Expression.cast_to_const(expr) if expr.shape != shape: if not expr.is_scalar(): raise ValueError('Only scalars may be promoted.') return Promote(expr, shape) else: return expr