numpy数组在numpy.mean()中更改

时间:2019-04-04 17:34:14

标签: python-3.x numpy k-means

我最近正在学习Kmeans。但是当我运行python代码时,数据集意外更改了。

通过使用numpy.mean()语句,我设法将问题定位到称为assert()的一行代码中。我试图将np.array的数据类型更改为np.float,但是没有用。我还打印了一些数据,它表明np.mean()无法正常工作。

我的原始数据集:

array([[0, 0],
       [3, 3],
       [1, 0],
       [4, 4],
       [4, 5],
       [5, 4],
       [5, 5]])

我的代码如下所示。 init_centroids()返回数据集的前k个元素。is_converged()比较两个np.array。 distance()返回两个向量的距离^ 2(平方距离)。

def k_mean(data, k):
    factor = data.shape[1]
    n = data.shape[0]
    label = np.zeros(n, dtype=np.int)
    centroids = init_centroids(data, k)
    old_centroids = np.zeros((k, factor), dtype=np.float)
    while not is_converged(centroids, old_centroids):
        assert((data == const_data).all())
        for i in range(n):
            min = np.inf
            for j in range(k):
                d = distance(centroids[j], data[i])
                if min > d:
                    label[i] = j
                    min = d
        assert((data == const_data).all())
        old_centroids = np.copy(centroids)
        assert((data == const_data).all())
        print(old_centroids, data[label==0], data[label==1])
        for m in range(k):
            centroids[m] = np.mean(data[label==m], axis=0, dtype=np.float)
            print(m, "\n", centroids[m], "\n", data[label==m])
        assert((data == const_data).all()) // stopped here
    return label, centroids

data = np.array([[0,0],[0,1],[1,0],[4,4],[4,5],[5,4],[5,5]])
const_data = np.copy(data)
label, centroids = k_mean(data, 2)

输出如下所示:

[[0 0]
 [0 1]] [[0 0]
 [1 0]] [[0 1]
 [4 4]
 [4 5]
 [5 4]
 [5 5]]
0 
 [0 0] 
 [[0 0]
 [1 0]]
1 
 [3 3] 
 [[3 3]
 [4 4]
 [4 5]
 [5 4]
 [5 5]]

然后,在代码退出函数AssertionError的最后一个for循环之后,它立即得到k_mean()。从输出中,我发现np.mean()无法按预期工作,并且我的数据集也发生了变化。 我很困惑,有人可以帮我吗?

0 个答案:

没有答案