【发布时间】:2021-07-21 23:49:00
【问题描述】:
我在理解方差的工作原理时遇到了很多麻烦,如果有人能解释我哪里出错了,我将不胜感激。
首先,下面的两个 NumPy 方法为特定数组的方差提供了相同的答案(比我更熟悉 Python 的人告诉我没有理由怀疑结果!)。
np.var(myArray)np.mean(abs(myArray - np.mean(myArray))**2)
问题是,当我使用别人使用的第三种方法时,我得到了不同的结果,但我不明白为什么。我担心 Python 正在做什么我不明白。谁能帮我解决这个问题?
-
First term - second term(其中 myArray 中的一个元素是 xComponent + yComponent + zComponent 的平方根加上它们自己)。
First term = (np.dot(xComponent, xComponent) + np.dot(yComponent, yComponent) + np.dot(zComponent, zComponent))/len(zComponent)
当我不使用单个组件而是使用总值时,我会得到相同的答案;即np.mean(myArray**2)。
Second term=np.mean(xComponent)**2 + np.mean(yComponent)**2 + np.mean(zComponent)**2
从第一项中减去第二项导致的结果与我使用上述方法 1 和 2 从 NumPy 得到的结果截然不同。该方法确实做到了方法 2 没有做到的一件事是为第二项提供了一个很小的数字。我读过第二个学期应该很小,虽然我不明白为什么。
编辑: 这是一个示例数组。它比我使用的常用数据集短得多。我目前无法测试它,但会尽快测试它是否代表我的问题,就像完整数据集一样。
myArray=np.array([33.4479672],
[36.1206867],
[33.84485692],
[27.28590267],
[21.85568418],
[17.01874484],
[25.50861718],
[29.40798574],
[36.71092762],
[45.72983789],
[40.47352496]])
下面是对应的x、y、z分量:
23.7427145, -7.72698565, 22.25631845
25.37794739, -9.0226496, 24.06772919
22.1871844, 2.31027064, 25.4532088
19.29475621, 8.9243651, 17.1052207
9.18913589, 18.3261273, -7.57520763
10.00418173, 5.86260433, -12.45728278
-4.0904234, 15.13497563, 20.12189104
-12.83798541, -16.57398946, 20.62325458
-5.6879695, -21.33899754, 29.32552461
19.06079677, 28.16146311, 30.57508946
25.88007, 27.25161939, 15.02256438
【问题讨论】:
-
我不知道
np.mean(abs(myArray-myArray())**2))应该做什么,但这不是一个有效的表达方式。这同样适用于np.var(myArray))。此外,您可以为不同的结果添加一个输入示例吗? (方差的计算对输入分布很敏感) -
@JérômeRichard,感谢您的建议。是的,我可以在几分钟内提供一个示例数组。我从这里的论坛帖子中获取了您提到的第一个表达式(我的方法 2)。我会修改它。
-
myArray和xComponent等之间的关系并不明显。 -
请展示数组及其组件的示例。
-
@hpaulj,感谢您指出这一点。 myArray 中的值是 xComponent、yComponent、zComponent 与 xComponent、yComponent、zComponent 的点积。我可以编辑问题以添加它。
标签: python python-3.x numpy statistics variance