为什么我必须明确列出该功能的列表?

时间:2019-07-02 08:56:30

标签: python loops scipy

我正在尝试通过改变一个参数nclusters_max来获取树状图的距离度量(轮廓),目的是绘制结果。

如果我明确列出要评估的数字的整数列表,一切都将正常工作

for i in [4,5,6,7,8,9,10,11,12]:
    dendrogram, IDs = dendrogram(encoding, n_samples=0, n_clusters_max=i, label_clusters=True, return_clusters=True)
    silhouette = metrics.silhouette_score(encoding, IDs, metric='euclidean')
    print(i, silhouette)

哪个产生输出:

4 0.25495732
5 0.27900532
6 0.20914535
7 0.21244033
8 0.21475217
9 0.21835302
10 0.21925814
11 0.20929264
12 0.21342315

但是,当我尝试通过使用list(np.arange(4,13))生成数字列表来更简洁(省力)时,即:

nclusters = list(np.arange(2,14))
for i in nclusters:
    dendrogram, IDs = dendrogram(encoding, n_samples=1, n_clusters_max=i, label_clusters=True, return_clusters=True)
    silhouette = metrics.silhouette_score(encoding, IDs, metric='euclidean')
    print(i, silhouette)

我收到错误TypeError: The second argument must be a number

nclusters_max必须为type(int),但是我不明白我如何生成该变量的值与为什么这可能是我的树状图函数产生问题之间的区别?

2 个答案:

答案 0 :(得分:1)

使用

创建'int'数组时
nclusters = list(np.arange(2,14))

它创建'numpy.int32'类型的整数。

在将其传递给函数之前,需要将其强制转换为'int'

n_clusters_max=int(i)

因为,在Python中,数据类型是类,因此这里是类numpy.int32int的区别。

答案 1 :(得分:0)

将列表元素转换为Python 本地类型,例如:

nclusters = [int(i) for i in np.arange(2, 14)]

如果数组/列表不太大,则使用范围:

for i in range(2, 14):