\documentclass[10pt,a4paper]{article} % Packages \usepackage{fancyhdr} % For header and footer \usepackage{multicol} % Allows multicols in tables \usepackage{tabularx} % Intelligent column widths \usepackage{tabulary} % Used in header and footer \usepackage{hhline} % Border under tables \usepackage{graphicx} % For images \usepackage{xcolor} % For hex colours %\usepackage[utf8x]{inputenc} % For unicode character support \usepackage[T1]{fontenc} % Without this we get weird character replacements \usepackage{colortbl} % For coloured tables \usepackage{setspace} % For line height \usepackage{lastpage} % Needed for total page number \usepackage{seqsplit} % Splits long words. %\usepackage{opensans} % Can't make this work so far. Shame. Would be lovely. \usepackage[normalem]{ulem} % For underlining links % Most of the following are not required for the majority % of cheat sheets but are needed for some symbol support. \usepackage{amsmath} % Symbols \usepackage{MnSymbol} % Symbols \usepackage{wasysym} % Symbols %\usepackage[english,german,french,spanish,italian]{babel} % Languages % Document Info \author{ThanhTrungK15} \pdfinfo{ /Title (convex-optimization.pdf) /Creator (Cheatography) /Author (ThanhTrungK15) /Subject (Convex Optimization Cheat Sheet) } % Lengths and widths \addtolength{\textwidth}{6cm} \addtolength{\textheight}{-1cm} \addtolength{\hoffset}{-3cm} \addtolength{\voffset}{-2cm} \setlength{\tabcolsep}{0.2cm} % Space between columns \setlength{\headsep}{-12pt} % Reduce space between header and content \setlength{\headheight}{85pt} % If less, LaTeX automatically increases it \renewcommand{\footrulewidth}{0pt} % Remove footer line \renewcommand{\headrulewidth}{0pt} % Remove header line \renewcommand{\seqinsert}{\ifmmode\allowbreak\else\-\fi} % Hyphens in seqsplit % This two commands together give roughly % the right line height in the tables \renewcommand{\arraystretch}{1.3} \onehalfspacing % Commands \newcommand{\SetRowColor}[1]{\noalign{\gdef\RowColorName{#1}}\rowcolor{\RowColorName}} % Shortcut for row colour \newcommand{\mymulticolumn}[3]{\multicolumn{#1}{>{\columncolor{\RowColorName}}#2}{#3}} % For coloured multi-cols \newcolumntype{x}[1]{>{\raggedright}p{#1}} % New column types for ragged-right paragraph columns \newcommand{\tn}{\tabularnewline} % Required as custom column type in use % Font and Colours \definecolor{HeadBackground}{HTML}{333333} \definecolor{FootBackground}{HTML}{666666} \definecolor{TextColor}{HTML}{333333} \definecolor{DarkBackground}{HTML}{C10443} \definecolor{LightBackground}{HTML}{FBEFF3} \renewcommand{\familydefault}{\sfdefault} \color{TextColor} % Header and Footer \pagestyle{fancy} \fancyhead{} % Set header to blank \fancyfoot{} % Set footer to blank \fancyhead[L]{ \noindent \begin{multicols}{3} \begin{tabulary}{5.8cm}{C} \SetRowColor{DarkBackground} \vspace{-7pt} {\parbox{\dimexpr\textwidth-2\fboxsep\relax}{\noindent \hspace*{-6pt}\includegraphics[width=5.8cm]{/web/www.cheatography.com/public/images/cheatography_logo.pdf}} } \end{tabulary} \columnbreak \begin{tabulary}{11cm}{L} \vspace{-2pt}\large{\bf{\textcolor{DarkBackground}{\textrm{Convex Optimization Cheat Sheet}}}} \\ \normalsize{by \textcolor{DarkBackground}{ThanhTrungK15} via \textcolor{DarkBackground}{\uline{cheatography.com/137592/cs/28908/}}} \end{tabulary} \end{multicols}} \fancyfoot[L]{ \footnotesize \noindent \begin{multicols}{3} \begin{tabulary}{5.8cm}{LL} \SetRowColor{FootBackground} \mymulticolumn{2}{p{5.377cm}}{\bf\textcolor{white}{Cheatographer}} \\ \vspace{-2pt}ThanhTrungK15 \\ \uline{cheatography.com/thanhtrungk15} \\ \end{tabulary} \vfill \columnbreak \begin{tabulary}{5.8cm}{L} \SetRowColor{FootBackground} \mymulticolumn{1}{p{5.377cm}}{\bf\textcolor{white}{Cheat Sheet}} \\ \vspace{-2pt}Published 20th August, 2021.\\ Updated 20th August, 2021.\\ Page {\thepage} of \pageref{LastPage}. \end{tabulary} \vfill \columnbreak \begin{tabulary}{5.8cm}{L} \SetRowColor{FootBackground} \mymulticolumn{1}{p{5.377cm}}{\bf\textcolor{white}{Sponsor}} \\ \SetRowColor{white} \vspace{-5pt} %\includegraphics[width=48px,height=48px]{dave.jpeg} Measure your website readability!\\ www.readability-score.com \end{tabulary} \end{multicols}} \begin{document} \raggedright \raggedcolumns % Set font size to small. Switch to any value % from this page to resize cheat sheet text: % www.emerson.emory.edu/services/latex/latex_169.html \footnotesize % Small font. \begin{multicols*}{2} \begin{tabularx}{8.4cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{8.4cm}}{\bf\textcolor{white}{CVXOPT}} \tn \SetRowColor{white} \mymulticolumn{1}{x{8.4cm}}{The {\bf{CVXOPT}} is a free software package for convex optimization based on the Python programming language. Its main purpose is to make the development of software for convex optimization applications straightforward by building on Python's extensive standard library and on the strengths of Python as a high-level programming language. \newline % Row Count 7 (+ 7) Use the following import convention: \newline % Row Count 8 (+ 1) `\textgreater{}\textgreater{}\textgreater{} import cvxopt`% Row Count 9 (+ 1) } \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{8.4cm}}{\bf\textcolor{white}{Dense and Sparse Matrices}} \tn \SetRowColor{white} \mymulticolumn{1}{x{8.4cm}}{Image could not be loaded.} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \SetRowColor{LightBackground} \mymulticolumn{1}{x{8.4cm}}{{\bf{CVXOPT}} extends the built-in Python objects with two matrix objects: {\bf{{\emph{spmatrix}}}} for sparse matrix and {\bf{{\emph{matrix}}}} for dense matrix} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{8.4cm}}{\bf\textcolor{white}{Dense Matrices}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{8.4cm}}{-{}-{}- The function {\bf{{\emph{matrix}}}} -{}-{}- \newline \textgreater{}\textgreater{}\textgreater{} from cvxopt import matrix \newline \textgreater{}\textgreater{}\textgreater{} A = matrix(1, (1, 4)) \newline \textgreater{}\textgreater{}\textgreater{} print(A) \newline {[} 1 1 1 1{]} \newline \textgreater{}\textgreater{}\textgreater{} A = matrix(1.0, (1, 4)) \newline \textgreater{}\textgreater{}\textgreater{} print(A) \newline {[} 1.00e+00 1.00e+00 1.00e+00 1.00e+00{]} \newline \textgreater{}\textgreater{}\textgreater{} A = matrix(1 + 1j) \newline \textgreater{}\textgreater{}\textgreater{} print(A) \newline {[} 1.00e+00+j1.00e+00{]} \newline \newline -{}-{}- Several ways to define integer matrix -{}-{}- \newline \textgreater{}\textgreater{}\textgreater{} A = matrix({[}0, 1, 2, 3{]}, (2,2)) \newline \textgreater{}\textgreater{}\textgreater{} A = matrix((0, 1, 2, 3), (2,2)) \newline \textgreater{}\textgreater{}\textgreater{} A = matrix(range(4), (2,2)) \newline \textgreater{}\textgreater{}\textgreater{} from array import array \newline \textgreater{}\textgreater{}\textgreater{} A = matrix(array('i', {[}0,1,2,3{]}), (2,2)) \newline \textgreater{}\textgreater{}\textgreater{} print(A) \newline {[} 0 2{]} \newline {[} 1 3{]} \newline \newline -{}-{}- {\bf{{\emph{NumPy}}}} arrays can be converted to matrices -{}-{}- \newline \textgreater{}\textgreater{}\textgreater{} from numpy import array \newline \textgreater{}\textgreater{}\textgreater{} x = array({[}{[}1., 2., 3.{]}, {[}4., 5., 6.{]}{]}) \newline \textgreater{}\textgreater{}\textgreater{} print(x) \newline array({[}{[} 1. 2. 3.{]} \newline {[} 4. 5. 6.{]}{]}) \newline \textgreater{}\textgreater{}\textgreater{} print(matrix(x)) \newline {[} 1.00e+00 2.00e+00 3.00e+00{]} \newline {[} 4.00e+00 5.00e+00 6.00e+00{]} \newline \newline -{}-{}- Another ways to create dense matrix -{}-{}- \newline \textgreater{}\textgreater{}\textgreater{} print(matrix({[}{[}1., 2.{]}, {[}3., 4.{]}, {[}5., 6.{]}{]})) \newline {[} 1.00e+00 3.00e+00 5.00e+00{]} \newline {[} 2.00e+00 4.00e+00 6.00e+00{]} \newline \textgreater{}\textgreater{}\textgreater{} B1 = matrix({[}6, 7, 8, 9, 10, 11{]}, (2,3)) \newline \textgreater{}\textgreater{}\textgreater{} B2 = matrix({[}12, 13, 14, 15, 16, 17{]}, (2,3)) \newline \textgreater{}\textgreater{}\textgreater{} B3 = matrix({[}18, 19, 20{]}, (1,3)) \newline \textgreater{}\textgreater{}\textgreater{} D = matrix({[}B1, B2, B3{]}) \newline \textgreater{}\textgreater{}\textgreater{} print(D) \newline {[} 6 8 10{]} \newline {[} 7 9 11{]} \newline {[} 12 14 16{]} \newline {[} 13 15 17{]} \newline {[} 18 19 20{]}} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{8.4cm}}{\bf\textcolor{white}{Sparse Matrices}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{8.4cm}}{\textgreater{}\textgreater{}\textgreater{} from cvxopt import matrix, spmatrix, sparse, spdiag \newline -{}-{}- The function {\bf{{\emph{spmatrix}}}} -{}-{}- \newline \textgreater{}\textgreater{}\textgreater{} A = spmatrix(1.0, range(2), range(2)) \newline \textgreater{}\textgreater{}\textgreater{} print(A) \newline {[} 1.00e+00 0 {]} \newline {[} 0 1.00e+00{]} \newline \textgreater{}\textgreater{}\textgreater{} A = spmatrix({[}1, 2, 3, 4{]}, {[}0, 0, 1, 1{]}, {[}0, 1, 0, 1{]}) \newline \textgreater{}\textgreater{}\textgreater{} print(A) \newline {[} 1.00e+00 2.00e+00{]} \newline {[} 3.00e+00 4.00e+00{]} \newline \newline -{}-{}- The function {\bf{{\emph{sparse}}}} -{}-{}- \newline \textgreater{}\textgreater{}\textgreater{} A = matrix({[}{[}1, 2{]}, {[}5, 6{]}{]}) \newline \textgreater{}\textgreater{}\textgreater{} print(A) \newline {[} 1 5{]} \newline {[} 2 6{]} \newline \textgreater{}\textgreater{}\textgreater{} B = spmatrix({[}{]}, {[}{]}, {[}{]}, (2, 2)) \newline \textgreater{}\textgreater{}\textgreater{} print(B) \newline {[}0 0{]} \newline {[}0 0{]} \newline \textgreater{}\textgreater{}\textgreater{} C = spmatrix({[}4, 2, 1, 9{]}, {[}0, 0, 1, 1{]}, {[}0, 1, 1, 0{]}) \newline \textgreater{}\textgreater{}\textgreater{} print(C) \newline {[} 4.00e+00 2.00e+00{]} \newline {[} 9.00e+00 1.00e+00{]} \newline \textgreater{}\textgreater{}\textgreater{} D = sparse({[}{[}A, B{]}, {[}B, C{]}{]}) \newline \textgreater{}\textgreater{}\textgreater{} print(D) \newline {[} 1.00e+00 5.00e+00 0 0 {]} \newline {[} 2.00e+00 6.00e+00 0 0 {]} \newline {[} 0 0 4.00e+00 2.00e+00{]} \newline {[} 0 0 9.00e+00 1.00e+00{]} \newline \textgreater{}\textgreater{}\textgreater{} D = sparse({[}A, C{]}) \newline \textgreater{}\textgreater{}\textgreater{} print(D) \newline {[} 1.00e+00 5.00e+00{]} \newline {[} 2.00e+00 6.00e+00{]} \newline {[} 4.00e+00 2.00e+00{]} \newline {[} 9.00e+00 1.00e+00{]} \newline \newline -{}-{}- The function {\bf{{\emph{spdiag}}}} -{}-{}- \newline \textgreater{}\textgreater{}\textgreater{} A = 3.0 \newline \textgreater{}\textgreater{}\textgreater{} print(A) \newline 3.0 \newline \textgreater{}\textgreater{}\textgreater{} B = matrix({[}{[}1, 2{]}, {[}4, 3{]}{]}) \newline \textgreater{}\textgreater{}\textgreater{} print(B) \newline {[} 1 4{]} \newline {[} 2 3{]} \newline \textgreater{}\textgreater{}\textgreater{} C = spmatrix({[}4, 5, 6, 7{]}, {[}0, 0, 1, 1{]}, {[}0, 1, 0, 1{]}) \newline \textgreater{}\textgreater{}\textgreater{} print(C) \newline {[} 4.00e+00 5.00e+00{]} \newline {[} 6.00e+00 7.00e+00{]} \newline \textgreater{}\textgreater{}\textgreater{} D = spdiag({[}A, B, C{]}) \newline \textgreater{}\textgreater{}\textgreater{} print(D) \newline {[} 3.00e+00 0 0 0 0 {]} \newline {[} 0 1.00e+00 4.00e+00 0 0 {]} \newline {[} 0 2.00e+00 3.00e+00 0 0 {]} \newline {[} 0 0 0 4.00e+00 5.00e+00{]} \newline {[} 0 0 0 6.00e+00 7.00e+00{]}} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{x{5.28 cm} x{2.72 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{8.4cm}}{\bf\textcolor{white}{Arithmetic Operations}} \tn % Row 0 \SetRowColor{LightBackground} Unary plus/minus & `+A, -A` \tn % Row Count 1 (+ 1) % Row 1 \SetRowColor{white} Addition & `A + B, A + c, c + A` \tn % Row Count 3 (+ 2) % Row 2 \SetRowColor{LightBackground} Subtraction & `A - B, A - c, c - A` \tn % Row Count 5 (+ 2) % Row 3 \SetRowColor{white} Matrix multiplication & `A * B` \tn % Row Count 6 (+ 1) % Row 4 \SetRowColor{LightBackground} Scalar multiplication and division & `c {\emph{ A, A }} c, A / c` \tn % Row Count 8 (+ 2) % Row 5 \SetRowColor{white} Remainder after division & `D \% c` \tn % Row Count 9 (+ 1) % Row 6 \SetRowColor{LightBackground} Elementwise exponentiation & `D**e` \tn % Row Count 10 (+ 1) % Row 7 \SetRowColor{white} In-place addition & `A += B, A += c` \tn % Row Count 12 (+ 2) % Row 8 \SetRowColor{LightBackground} In-place subtraction & `A -= B, A -= c` \tn % Row Count 14 (+ 2) % Row 9 \SetRowColor{white} In-place scalar multiplication and division & `A *= c, A /= c` \tn % Row Count 16 (+ 2) % Row 10 \SetRowColor{LightBackground} In-place remainder & `A \%= c` \tn % Row Count 17 (+ 1) \hhline{>{\arrayrulecolor{DarkBackground}}--} \SetRowColor{LightBackground} \mymulticolumn{2}{x{8.4cm}}{`A` and `B` are dense or sparse matrices of compatible dimensions. \newline `c` is a scalar (a Python number or a dense 1 by 1 matrix) \newline `D` is a dense matrix. \newline `e` is a Python number} \tn \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} % That's all folks \end{multicols*} \end{document}