![如何存储值数组?](https://linux22.com/image/377678/%E5%A6%82%E4%BD%95%E5%AD%98%E5%82%A8%E5%80%BC%E6%95%B0%E7%BB%84%EF%BC%9F.png)
我需要计算循环内函数生成的一组值的平均值。可以吗?
\documentclass{article}
\usepackage{tikz}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\pgfmathsetseed{5411}
\def\N{5}
\node[]at(0,1){\textbf{Values}};
\foreach \n in {1,...,\N}
{
\pgfmathtruncatemacro{\value}{10*rand}
\node[]at(1+\n,1){$\value$};
%\pgfmathsomething{\mean}{"(sum of values)/N"}.
}
\node[]at(0,0){\textbf{Mean}};
\node[]at(3,0){$\dots$};
%\node[]at(3,0){$\mean$};
\end{tikzpicture}
\结束{文档}
答案1
这是一个强力的最小损害提案。
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\pgfmathsetseed{5411}
\def\N{5}
\node[]at(0,1){\textbf{Values}};
\pgfmathsetmacro{\mysum}{0}
\foreach \n in {1,...,\N}
{
\pgfmathtruncatemacro{\value}{10*rand}
\node[]at(1+\n,1){$\value$};
\pgfmathtruncatemacro{\mysum}{\mysum+\value}
\xdef\mysum{\mysum}
%\pgfmathsomething{\mean}{"(sum of values)/N"}.
}
\node[]at(0,0){\textbf{Mean}};
\node[]at(3,0){$\mysum$};
%\node[]at(3,0){$\mean$};
\end{tikzpicture}
\end{document}
您加载了 pgfplots,但没有使用它。如果您使用它,您可以利用统计功能以更优雅的方式完成这些事情,但对于目前的情况来说,这可能有点过头了。
答案2
这个问题在之前的帖子中已经基本得到解答这里;但数据不是由使用循环的函数创建的。我已使用以下代码更新了它:
\documentclass{article}
\usepackage{sagetex}
\begin{document}
\begin{sagesilent}
MyData = []
for i in range(1,6):
MyData += [i^2]
\end{sagesilent}
\noindent My data set is $S = \sage{MyData}$. For this data:\\
The sample size is $\sage{len(MyData)}$.\\
The mean is $\sage{mean(MyData)}$.\\
The median is $\sage{median(MyData)}$.\\
The minimum value is $\sage{min(MyData)}$.\\
The maximum value is $\sage{max(MyData)}$.\\
The standarad deviation of the sample is $\sage{std(MyData)}$.\\
The sum of the data values is $\sage{sum(MyData)}$.
\end{document}
为了使用该sagetex
软件包,必须将其下载到本地计算机,或者,如果你不想这样做,你可以设置一个免费的可钙帐户。使用的语言是 Python,这使得代码更易于阅读/调试。请注意,范围 (1,6) 不包括最后一项 6。因此数据集中有 5 个元素。通过让计算机代数系统处理数学运算,您还可以快速获得数据集的许多其他统计数据。
答案3
一种相当通用的方法expl3
。
\documentclass{article}
\usepackage{xparse}
\usepackage{tikz}
\ExplSyntaxOn
\NewDocumentCommand{\setarray}{O{default}mm}
{% #1 is the name of the array
% #2 is the number of values
% #3 is the format of the values
\seq_clear_new:c { l_yngabl_array_#1_seq }
\int_step_inline:nnnn { 1 } { 1 } { #2 }
{
\seq_put_right:cx { l_yngabl_array_#1_seq } { \fp_eval:n { #3 } }
}
}
\NewExpandableDocumentCommand{\getvalue}{O{default}m}
{% #1 is the name of the array
% #2 is the index of the item to retrieve
\seq_item:cn { l_yngabl_array_#1_seq } { #2 }
}
\NewExpandableDocumentCommand{\mean}{O{2}m}
{% #1 is the optional number of decimal digits
% #2 is the name of the array (empty for default)
\fp_eval:n
{
round(
(\seq_use:cn { \__yngabl_array:n { #2 } } { + })/
\seq_count:c { \__yngabl_array:n { #2 } }
,#1)
}
}
\cs_new:Nn \__yngabl_array:n
{
l_yngabl_array_ \tl_if_blank:nTF { #1 } { default } { #1 } _seq
}
\ExplSyntaxOff
\begin{document}
\begin{tikzpicture}
\setarray{8}{randint(10)}
\node [] at (0,1) {\textbf{Values}};
\foreach \n in {1,...,8}{
\node [] at (1+\n,1) {$\getvalue{\n}$};
}
\node [] at (0,0) {\textbf{Mean}};
\node [] at (2,0) {$\mean{}$};
\end{tikzpicture}
\bigskip
\begin{tikzpicture}
\setarray{8}{round(rand(),3)}
\node [] at (0,1) {\textbf{Values}};
\foreach \n in {1,...,8}{
\node [] at (1+\n,1) {$\getvalue{\n}$};
}
\node [] at (0,0) {\textbf{Mean}};
\node [] at (2,0) {$\mean[3]{}$};
\end{tikzpicture}
\bigskip
\begin{tikzpicture}
\setarray[powers]{8}{round(2^#1/42,2)}
\node [] at (0,1) {\textbf{Values}};
\foreach \n in {1,...,8}{
\node [] at (1+\n,1) {$\getvalue[powers]{\n}$};
}
\node [] at (0,0) {\textbf{Mean}};
\node [] at (2,0) {$\mean{powers}$};
\end{tikzpicture}
\end{document}
如您所见,第二个强制参数接收\setarray
计算值的指令。在此参数中,#1
引用执行计算时的当前数组索引。