用于k均值聚类的Python Shape函数

时间:2018-03-22 09:05:53

标签: python-3.x cluster-analysis geotiff

我有一个geotiff灰度图像,它给了我(4377,6172)2D数组。在第一部分中,我正在考虑(> 1024,:1024)我的压缩算法的值(总值是 - > 1024 * 1024 = 1048576)。通过这个算法,我通过算法得到finalmatrix list var中的总共4个值。在此之后,我正在对这些值应用K-means算法。一个程序如下:



import numpy as np
from osgeo import gdal
from sklearn import cluster
import matplotlib.pyplot as plt

dataset =gdal.Open("1.tif")
band = dataset.GetRasterBand(1)
img = band.ReadAsArray()

finalmat = [255, 0, 2, 2]

#Converting list to array for dimensional change
ay = np.asarray(finalmat).reshape(-1,1)    

fig = plt.figure()

k_means = cluster.KMeans(n_clusters=2)
k_means.fit(ay)

cluster_means = k_means.cluster_centers_.squeeze()
a_clustered = k_means.labels_

print('# of observation :',ay.shape)

print('Cluster Means : ', cluster_means)

a_clustered.shape= img.shape

fig=plt.figure(figsize=(125,125))

ax = plt.subplot(2,4,8)
plt.axis('off')
xlabel = str(1) , ' clusters'
ax.set_title(xlabel)
plt.imshow(a_clustered)
    
plt.show()
fig.savefig('kmeans-1 clust ndvi08jan2010_guj 12 .png')    
    




在上面的程序中,我在 a_clustered.shape = img.shape 行中收到错误。我得到的错误如下:



Error line:  

a_clustered.shape= img.shape

ValueError: cannot reshape array of size 4 into shape (4377,6172)

<matplotlib.figure.Figure at 0x7fb7c63975c0>
&#13;
&#13;
&#13;

实际上,我想通过压缩值可视化原始图像上的聚类。你能否建议做什么

1 个答案:

答案 0 :(得分:0)

在1维数据上使用KMeans没有多大意义。

在4 x 1阵列上使用它更有意义!

您的网站来自于您无法将4 x 1整数数组调整为大图片的事实。

只需打印您要绘制的数组a_clustered即可。它可能包含[0, 1, 1, 1]