SVD 图表

SVD 图表

如何在乳胶中绘制如下内容:

在此处输入图片描述

答案1

这是根据我的回答得出的初步结论矩阵分解维度图

框的语法是\matbox{rows}{row-label}{columns}{column-label}{box-title}。例如,\matbox{3}{dimensions}{8}{documents}{...}创建一个有 3 行标记为“维度”和 8 列标记为“文档”的框。

为了允许使用复杂的框标题,我引入了\titlebox[width]{primary-math-label}{sub-text}。框可以用垂直移动\raiserows{row-shift}{box-to-be-shifted}row-shift应该将设置为矩阵行高差的 1/2。例如,这里高矩阵有 7 行,小矩阵有 3 行高。因此移位为 .5(7-3) = 2。

\documentclass{article}
\usepackage{stackengine,graphicx}
\stackMath
\newlength\matfield
\newlength\tmplength
\def\matscale{1.}
\newcommand\dimbox[3]{%
  \setlength\matfield{\matscale\baselineskip}%
  \setbox0=\hbox{\vphantom{X}\smash{#3}}%
  \setlength{\tmplength}{#1\matfield-\ht0-\dp0}%
  \fboxrule=1pt\fboxsep=-\fboxrule\relax%
  \fbox{\makebox[#2\matfield]{\addstackgap[.5\tmplength]{\box0}}}}
\newcommand\raiserows[2]{%
   \setlength\matfield{\matscale\baselineskip}%
   \raisebox{#1\matfield}{#2}}
\newcommand\matbox[5]{
  \raisebox{2.3ex}{\rotatebox[origin=center]{90}{\scalebox{.45}{#2}}}\,%
  \stackon{\dimbox{#1}{#3}{#5}}{\scalebox{.45}{#4}}}
\newcommand\titlebox[3][30ex]{\stackanchor{#2}{\scalebox{.45}{\parbox{#1}{\centering #3}}}}
\begin{document}
\[\renewcommand\matscale{.6}
\matbox{7}{words}{8}{documents}{%
  \titlebox[20ex]{X}{transformed word-document co-occurance matrix}} 
= 
\matbox{7}{words}{3}{dimensions}{\titlebox[10ex]{U}{word space}} 
\raiserows{2}{\matbox{3}{dimensions}{3}{dimensions}{\titlebox{D}{weights}}} 
\stackunder[6pt]{%
  \raiserows{2}{\matbox{3}{dimensions}{8}{documents}{\titlebox{V^T}{document space}}}%
}{\scalebox{.6}{LSA}}
\]
\end{document}

在此处输入图片描述

使用默认的\matscale=1,一行将占据 的高度1\baselineskip。因此,可以通过重置 来全局更改框大小\matscale。在上面的 MWE 中,我将值重置为 .6,这样 7 行占据 .6(7) =4.2\baselineskip的垂直距离。行数和列数可以设置为实际矩阵值,这些值可以非常大,只要\matscale和行/列值的大小一起适当减小 即可。

\matscale下面是改为0.8后的样子:

在此处输入图片描述

相关内容