如果你想自己定义一个距离的function的话,scikit-learn是不行的,只支持Euclidean distance 如果你觉得spark可以的话,实际上sprk的k-means也是不行的,好一点的是支持Euclidean distance,还支持cosine distance 如果你想自己定义function处理的话,二个方法: 1、自己实现算法,可参考的文档: 一个简单的讲解 https://medium.com/machine-learning-algorithms-from-scratch/k-means-clustering-from-scratch-in-python-1675d38eee42 一个简单的代码: https://github.com/pavankalyan1997/Machine-learning-without-any-libraries/tree/master/2.Clustering/1.K_Means_Clustering 这个代码仓库有很多实现不依赖于第三方库 stackoverflow的高赞的回答也实现了一个简单的