如何解决运行PCA马氏距离异常检测代码时出现'numpy.ndarray' object is not callable错误
错误原因
报错的核心原因是变量名与函数名重名,覆盖了原函数引用:
你自定义的协方差矩阵计算函数名为cov_matrix,而主代码中调用该函数时,将第一个返回值的变量名也设为了cov_matrix:
cov_matrix, inv_cov_matrix = cov_matrix(data=data_train)
第一次执行该行时cov_matrix还指向你定义的函数,可正常调用,但执行完成后cov_matrix就会被覆盖为函数返回的协方差矩阵(numpy.ndarray类型),如果后续再次调用cov_matrix(),Python会尝试把numpy数组作为函数调用,就会触发'numpy.ndarray' object is not callable报错。
修复方案
- 重命名返回值变量,避免和函数名冲突即可:
# 修正后写法 cov_mat, inv_cov_mat = cov_matrix(data=data_train)
- 额外注意你代码存在缩进错误:当前所有主代码段的缩进层级错误,完全落在了
MD_threshold函数的定义范围内,运行时主代码不会被执行,需要把所有主代码行向左取消缩进,调整到和其他函数同级的全局作用域下。
内容的提问来源于stack exchange,提问作者WDpad159
相关产品推荐
相关产品推荐

