Python 使用scipy.cluster.hierarchy中的链接函数

Python 使用scipy.cluster.hierarchy中的链接函数,python,numpy,scipy,cluster-analysis,Python,Numpy,Scipy,Cluster Analysis,我试图将层次聚类应用于图像的像素值。这是为了分配图像的不同区域并提取具有相似颜色的片段。问题是仅按近颜色分割图像,而不是按形状分割图像。 我正在尝试(假设图像加载为numpy形状数组(256256,3),由于版权问题,无法共享图片: from scipy.cluster.hierarchy import dendrogram, linkage ppp=img.reshape(img.shape[0]*img.shape[1],img.shape[2]) Z = linkage(ppp, meth

我试图将层次聚类应用于图像的像素值。这是为了分配图像的不同区域并提取具有相似颜色的片段。问题是仅按近颜色分割图像,而不是按形状分割图像。 我正在尝试(假设图像加载为numpy形状数组(256256,3),由于版权问题,无法共享图片:

from scipy.cluster.hierarchy import dendrogram, linkage
ppp=img.reshape(img.shape[0]*img.shape[1],img.shape[2])
Z = linkage(ppp, method = 'ward')
dendrogram(Z,leaf_rotation=90.,    leaf_font_size=8.,)
这是一个错误:

MemoryError                               Traceback (most recent call last)
<ipython-input-87-39453b2f2da1> in <module>()
     14     ppp=img.reshape(img.shape[0]*img.shape[1],img.shape[2])
---> 15     Z = linkage(ppp, method = 'ward')
     16     dendrogram(Z,leaf_rotation=90.,    leaf_font_size=8.,)

~\AppData\Local\Continuum\anaconda3\lib\site-packages\scipy\cluster\hierarchy.py in linkage(y, method, metric, optimal_ordering)
    706                          'matrix looks suspiciously like an uncondensed '
    707                          'distance matrix')
--> 708         y = distance.pdist(y, metric)
    709     else:
    710         raise ValueError("`y` must be 1 or 2 dimensional.")

~\AppData\Local\Continuum\anaconda3\lib\site-packages\scipy\spatial\distance.py in pdist(X, metric, *args, **kwargs)
   1650     out = kwargs.pop("out", None)
   1651     if out is None:
-> 1652         dm = np.empty((m * (m - 1)) // 2, dtype=np.double)
   1653     else:
   1654         if out.shape != (m * (m - 1) // 2,):
MemoryError回溯(最近一次调用)
在()
14 ppp=模型重塑(模型形状[0]*模型形状[1],模型形状[2])
--->15 Z=联动(ppp,方法='ward')
16树状图(Z,叶旋转=90,叶字体大小=8.)
链接中的~\AppData\Local\Continuum\anaconda3\lib\site packages\scipy\cluster\hierarchy.py(y,方法,度量,最佳顺序)
706“矩阵看起来可疑地像一个未浓缩的”
707‘距离矩阵’)
-->708 y=距离pdist(y,公制)
709其他:
710 raise VALUE ERROR('y'必须是一维或二维的。“)
pdist中的~\AppData\Local\Continuum\anaconda3\lib\site packages\scipy\space\distance.py(X,公制,*args,**kwargs)
1650 out=kwargs.pop(“out”,无)
1651如果out为无:
->1652 dm=np.empty((m*(m-1))//2,dtype=np.double)
1653其他:
1654如果变形!=(m*(m-1)//2,):

你能帮忙吗

ppp
具有形状(65536,3),因此该错误消息中的
m
为65536。在内部,
linkage
创建一个大小为
m*(m-1)//2的浮点值数组,以保存所有成对距离。在您的例子中,这是2147450880个元素。每个浮点元素需要八个字节,因此数组的总大小为17179607040字节。超过17千兆字节。您可能没有足够的内存来分配这样的数组