我一直在尝试使用z-score来过滤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.array(range(1, 1000))
要生成正态分布,可以使用以下方法:
arr = np.random.normal(0, 1, 1000)
而且 bitwise_or 或 bitwise_and 在这种情况下是错误的,您应该使用 logical_or 或 logical_and :
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)