gpt4 book ai didi

loops - Mathematica : Conditional Operations on Lists

转载 作者:行者123 更新时间:2023-12-04 22:00:40 25 4
gpt4 key购买 nike

我想对列中的“行”求平均值。即在另一列中具有相同值的行。

例如 :

e= {{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2}, 
{69, 7, 30, 38, 16, 70, 97, 50, 97, 31, 81, 96, 60, 52, 35, 6,
24, 65, 76, 100}}

我想平均第二列中第一列中具有相同值的所有值。

所以这里:Col 1 = 1 & Col 1 = 2的平均值

然后使用此操作的结果创建第三列。因此,对于前 10 行和接下来的 10 行,该列中的值应该相同。

非常感谢您提供的任何帮助!

洛杉矶

输出理想格式:

最佳答案

有趣的问题。这是我想到的第一件事:

e[[All, {1}]] /. Reap[Sow[#2, #] & @@@ e, _, # -> Mean@#2 &][[2]];

ArrayFlatten[{{e, %}}] // TableForm

要四舍五入,您可以简单地在上面的代码中的 Round@ 之前添加 Mean: Round@Mean@#2
这是一种稍微快一点的方法,但我实际上更喜欢上面的 Sow/ Reap :
#[[1, 1]] -> Round@Mean@#[[All, 2]] & /@ GatherBy[e, First];

ArrayFlatten[{{e, e[[All, {1}]] /. %}}] // TableForm

如果第一列中有许多不同的元素,则可以通过在替换 ( Dispatch ) 完成之前将 /. 应用于生成的规则列表来加快上述任一解决方案的速度。该命令告诉 Mathematica 为规则列表构建和使用优化的内部格式。

这是一个较慢的变体,但我很喜欢它,无论如何都可以分享:
Module[{q},
Reap[{#, Sow[#2,#], q@#} & @@@ e, _, (q@# = Mean@#2) &][[1]]
]

另外,一般提示,您可以替换:
Table[RandomInteger[{1, 100}], {20}]RandomInteger[{1, 100}, 20]
Join[{c}, {d}] // TransposeTranspose[{c, d}]

关于loops - Mathematica : Conditional Operations on Lists,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6125764/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com