对FARS数据集做K-Means聚类时遇array.array()无关键字参数错误求助
解决K-Means聚类中的TypeError: array.array() takes no keyword arguments错误
问题场景
在对FARS数据集执行K-Means聚类时触发如下错误,此前将int32替换为np.int32解决过类型报错,但本次错误无法排查:
错误回溯
TypeError Traceback (most recent call last) <ipython-input-11-29801179ab6c> in <cell line: 5>() 3 kmeans = KMeans(n_clusters=2, random_state=0, n_init="auto").fit(X) 4 kmeans.labels_ ----> 5 array([1, 1, 1, 0, 0, 0], dtype=np.int32) 6 kmeans.predict([[0, 0], [12, 3]]) 7 array([1, 0], dtype=np.int32) TypeError: array.array() takes no keyword arguments
原代码示例
X = np.array([[1, 2], [1, 4], [1, 0], ... [10, 2], [10, 4], [10, 0]]) kmeans = KMeans(n_clusters=2, random_state=0, n_init="auto").fit(X) kmeans.labels_ array([1, 1, 1, 0, 0, 0], dtype=np.int32) kmeans.predict([[0, 0], [12, 3]]) array([1, 0], dtype=np.int32) kmeans.cluster_centers_ array([[10., 2.], [ 1., 2.]])
错误原因
核心问题是把示例输出当成可执行代码运行:
- 代码第5、7行的
array([...], dtype=np.int32)是kmeans.labels_和kmeans.predict()的返回结果展示,并非需要执行的语句 - 即便要手动创建数组,当前环境中
array指向Python内置的array.array类,而非numpy的np.array函数,内置array.array不支持dtype关键字参数,因此触发报错
修正方法
直接移除那些手动编写的array(...)行;若确实需要手动创建numpy数组,需明确使用np.array:
修正后的可执行代码
import numpy as np from sklearn.cluster import KMeans X = np.array([[1, 2], [1, 4], [1, 0], [10, 2], [10, 4], [10, 0]]) kmeans = KMeans(n_clusters=2, random_state=0, n_init="auto").fit(X) # 直接获取聚类标签结果 print(kmeans.labels_) # 执行预测并获取结果 pred_result = kmeans.predict([[0, 0], [12, 3]]) print(pred_result) # 获取聚类中心 print(kmeans.cluster_centers_)
手动创建numpy数组的正确写法
# 明确调用numpy的array函数 np.array([1, 1, 1, 0, 0, 0], dtype=np.int32)
内容的提问来源于stack exchange,提问作者Louisa Wareing
相关产品推荐
相关产品推荐

