如何存储值数组?

如何存储值数组?

我需要计算循环内函数生成的一组值的平均值。可以吗?

\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引用执行计算时的当前数组索引。

在此处输入图片描述

相关内容