【发布时间】:2013-04-11 15:32:07
【问题描述】:
我的问题:
有没有办法创建一棵价值树? 类似于命令 TreeForm 的输出, 但在节点中有值?
我为什么要这个?
我正在尝试做一个完整的程序来分析我的实验课程的输出。
每列数据作为一个符号赋值。一般来说,每一列都是有意义的:它不仅仅是一堆不同的变量。我想说的是,总的来说,计算是“按列”完成的。我的问题是,当我需要进行需要更复杂的“水平”结构的计算时:将变量分配给列缺乏“水平灵活性”。 (在某种程度上,这是在 Excel 中使用$$ 和数组公式解决的问题)
让我用一个例子来说明:
y={1,2,3,4,5,6,7,8,9};
x={-1,-2,-3};
我想将 y 的 1;;3, 4;;8, 9;;9 部分与 x 的每个元素相关联。我所说的关联是指对于某些计算,函数的输入将作为每个集合的参数。
我知道 Map、Apply、Thread 和 MapThread 等函数。我一直在使用它们来解决这类问题,但有时会有点混乱。
我也知道分区,如果我想在相同长度的子数组中分隔 y,它将解决我的问题。
正如我在我的问题中所说,我想要的是构建一个类似网络/树的东西,它在我的计算的每个步骤中“归档”参数的结构。就像在网络理论中一样,当每个节点作为它与网络其余部分的连接的关联列表时。请注意,此列表不应包含值,而是包含连接节点的某种坐标
示例:
计算列表的不规则分割长度n={3,2,5}的均值和均方差
y={3,5,8,7,9,4,6,2,1,5};
我的概念性方法:
我的表/树的第一列将是数据 y。要引用某个列上的某个值,我将使用一对坐标 i,j:i 代表列,j 代表内部位置。 我会将坐标 i=1 分配给 y。
对于均值计算,我有什么样的“计算连接”?
Yav=F1[y]=Mean[y]
均值列 Xav i=2 将包含 3 个元素。我为每个人分配一个连接列表给 y:
("" 的连接用 C"" 表示)
CYav[[1]]: {1,{1,2,3}}
CYav[[2]]: {1,{4,5}};
CYav[[3]]: {1,{6,7,8,9,10}}
连接写成形式 {i,{j 的 i 的元素}}
现在,让我们计算均方偏差。也就是说,
Ymsd=F2[y,Yav]=Mean[(y-Yav)^2]
此列为 i=3 以及 3 个元素。
对于这个计算,我想使用 i=1,2 列。与 y 的计算连接与用于计算 Yav 的连接相同。但现在,我需要将 Ymsd 连接到 Yav。
CYmsd[[1]]: {{1,{1,2,3}},{2,1}}
CYmsd[[2]]: {{1,{4,5}},{2,2}}
CYmsd[[3]]: {{1,{6,7,8,9,10}},{2,3}}
现在连接是前一种类型的一对连接,每列连接一个。
分配连接后,我将使用一个函数来获取正确的值,在创建的地图的指导下,并应用 F1、F2。
【问题讨论】: