C-Means聚类算法中InitializeMembershipWeight函数数组定义失败及NameError问题
问题
在实现C-Means聚类算法时,调用initializeMembershipWeights函数后无法访问内部定义的数组,代码及报错信息如下:
#Membership Initialisation def initializeMembershipWeights(): weight = np.random.dirichlet(np.ones(k),n) weight_array = np.array(weight) return weight_array print(weight_array)
报错信息:
NameError Traceback (most recent call last) <ipython-input-114-70f058bffa58> in <module> ----> 1 print(weight_array) NameError: name 'weight_array' is not defined
解决方案
- 核心问题:变量作用域限制
weight_array是函数内部的局部变量,仅在函数执行范围内有效,函数外部无法直接引用。必须通过调用函数并接收返回值的方式获取该数组。 - 修正后的代码
import numpy as np # 提前定义k(聚类数)和n(样本数),根据实际需求赋值 k = 3 n = 10 #Membership Initialisation def initializeMembershipWeights(): weight = np.random.dirichlet(np.ones(k), n) weight_array = np.array(weight) return weight_array # 调用函数并保存返回结果 membership_weights = initializeMembershipWeights() # 打印结果 print(membership_weights)
- 额外提示
代码中用到的k和n必须在函数外部提前定义,否则会触发新的NameError,提示这两个变量未定义。
内容的提问来源于stack exchange,提问作者pc419
相关产品推荐
相关产品推荐

