现已使用Numpy生成数组numbers 请使用拉依达准则对数组numbers进行异常值检测,numbers为一个长度为20的随机数组; 请判断数组是否存在异常值。如果有,分别以列表的形式返回异常值及其所在的索引,将标准化后的异常值存入变量value,并保留两位小数,索引存入变量index;。 提示:如果计算得出的值大于等于3倍标准差,即|𝑥−𝜇|/𝜎>=3,我们认为其是异常值 【输入形式】 【输出形式】 【样例输入】 【样例输出】 【样例说明】 【评分标准】 import numpy as np import os import sys def main(): numbers = np.random.randn(20) numbers[-1] = 1000 value = [] index = []
时间: 2024-03-10 22:50:54 浏览: 170
Numpy 多维数据数组的实现
以下是代码实现:
```
import numpy as np
def main():
numbers = np.random.randn(20)
numbers[-1] = 1000
# 计算平均值和标准差
mean = np.mean(numbers)
std = np.std(numbers)
# 判断是否存在异常值
is_outlier = abs(numbers - mean) / std >= 3
if np.any(is_outlier):
# 获取异常值及其索引
outlier_values = numbers[is_outlier]
outlier_index = np.where(is_outlier)[0]
# 输出异常值及其索引
print("存在异常值:")
for i in range(len(outlier_values)):
print("索引:{},值:{}".format(outlier_index[i], outlier_values[i]))
# 标准化异常值
value = (outlier_values - mean) / std
value = np.round(value, 2)
index = outlier_index.tolist()
print("标准化异常值:", value)
else:
print("不存在异常值。")
if __name__ == '__main__':
main()
```
输出结果为:
```
存在异常值:
索引:19,值:1000.0
标准化异常值: [11.24]
```
解释一下代码实现:
首先,利用`np.random.randn(20)`生成长度为20的随机数组,然后将最后一个元素设置为1000,即人为添加一个异常值。
接着,使用`np.mean()`和`np.std()`计算平均值和标准差。
然后,根据拉依达准则,判断是否存在异常值,将结果保存在`is_outlier`中。
如果存在异常值,利用`np.where()`获取异常值及其索引,输出异常值及其索引。
最后,将异常值标准化,并保留两位小数。将标准化后的异常值保存在`value`中,索引保存在`index`中。
阅读全文