我一直在尝试使用 z 分数来过滤 python 中的奇数值。对于计算,我使用了 scipy 提供的版本,而不是使用 numpy 以及 Mean 和 std 函数自己计算。结果是一样的。我认为 -1 到 1 的 p 值应该会产生 68.1% 的样本,或者也许我的概念是错误的,它仅代表值本身。
但是,在下面的示例中,我期望输出接近 0.682,而不是 0.57。
import numpy
from scipy import stats
arr = numpy.array(range(1, 1000))
col_z_score = stats.zscore(arr)
print((~numpy.bitwise_or(-1 >= col_z_score, 1 <= col_z_score)).sum() / len(col_z_score))
print((numpy.bitwise_and(1 >= col_z_score, -1 <= col_z_score)).sum() / len(col_z_score))
68.1% 规则适用于正态分布。
arr = np.array(range(1, 1000))
遵循均匀分布,因此为 57%。
要生成正态分布,您可以使用以下方法:
arr = np.random.normal(0, 1, 1000)
此外,在这种情况下,
bitwise_or
或bitwise_and
是错误的,您应该使用logical_or
或logical_and
:
within_range = np.logical_and(col_z_score >= -1, col_z_score <= 1)
proportion_within_range = within_range.sum() / len(col_z_score)