You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Anaconda环境下运行scikit-learn的Birch聚类算法报错求助

解决Birch聚类报错:ValueError: ndarray is not C-contiguous

我之前在本地环境里也碰到过一模一样的问题!别的聚类算法都跑得好好的,唯独Birch卡在这里,后来查了才明白,这是因为Birch算法对输入数组的内存布局有严格要求——它需要输入的是C连续(C-contiguous)的numpy数组,但你当前DataFrame底层的数组刚好不是这种布局。而其他聚类算法(比如Kmeans、AgglomerativeClustering)对内存布局没这么苛刻,所以能正常运行。

至于为什么Google Colab里没问题?大概率是Colab环境里的pandas/numpy默认配置和你本地Anaconda Spyder不一样,生成的数组默认就是C连续的,所以没触发这个报错。

下面给你两个亲测有效的解决方案:

方案一:强制转换为C连续数组

直接把DataFrame转换成C连续的numpy数组,再传给Birch:

from sklearn.cluster import Birch
import numpy as np

# 将DataFrame转换为C连续的float64数组
X = df.to_numpy(dtype=np.float64, order='C')

brc = Birch(n_clusters=4, threshold=0.15)
cluster_predict = brc.fit_predict(X)
print(cluster_predict)

你可以先运行print(df.values.flags.c_contiguous)验证一下,如果返回False,那这个方法肯定能解决问题。

方案二:创建DataFrame的C连续副本

如果你的DataFrame是从其他非连续数组转换而来的,直接创建一个副本也能修复内存布局问题:

# 创建一个C连续的DataFrame副本
df = df.copy()

brc = Birch(n_clusters=4, threshold=0.15)
cluster_predict = brc.fit_predict(df)
print(cluster_predict)

这个方法更简洁,不过如果DataFrame里有复杂的数据类型,还是方案一更稳妥。

我当时就是用方案一解决的,你可以先试试,应该能顺利跑起来Birch聚类了!

内容的提问来源于stack exchange,提问作者Carola

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 23:37:37