问题描述
我有一个 numpy 数组的行和列索引列表,如下所示。我需要找到并返回最近间隔点的质心的 row 和 col 索引。
(array([1389,1389,1390,1391,1392,1393,1394,1395,1396,1397,1398,1399,1400,1401,1523,1524,1525,1526,1527,1528,1529,1530,1531,1532,1533,1534,1535,1536,1659,1660,1661,1662,1663,1664,1665,1666,1667,1668,1669,1670,1671,1672,1929,1930,1931,1932,1933,1934,1935,1936,1937,1938,1939,1940,1941,1942,2064,2065,2066,2067,2068,2069,2070,2071,2072,2073,2075,2076,2077,2199,2200,2201,2202,2203,2204,2205,2206,2207,2208,2209,2210,2211,2212,2338,2339,2340,2341,2342,2474,2475,2609,2609],dtype=int64),array([1562,1563,1562,1642,1643,1720,1878,1871,1876,1877,1880,1881,1882,1884,1872,1873,1879,1883,1885,1874,1875,1957,1958,1959,1951,1952,1953,1954,1955,1956,1961,1965,1950,1964,2037,2036,2030,2031,2033,2034,2035,2038,2039,2040,2043,2044,2032,2041,2110,2111,2113,2114,2115,2116,2118,2119,2120,2121,2122,2187,2188,2189,2190,2191,2193,2194,2196,2197,2198,2266,2267,2268,2269,2270,2271,2273,2274,2275,2276,2277,2278],dtype=int64))
这些应该返回 5 个质心行和列索引,因为在空间上有 5 个组。
我尝试使用距离公式计算距离。但这似乎很复杂。然后我尝试对每个 row 和 col 索引进行分组。但这似乎也不起作用,因为正在消除重复项。
解决方法
我找到了解决问题的方法。
可以使用简单的 k 均值分类计算点的空间质心。让 apply
成为我上传的输入数据集。我们需要重新排列数据集并直接使用它来查找集群。
x
from sklearn.cluster import KMeans
X = np.array([[a,b] for (a,b) in zip(x[0],x[1])])
km = KMeans(
n_clusters=9,init='random',n_init=10,max_iter=300,tol=1e-04,random_state=0
)
y_km = km.fit_predict(X)
km.cluster_centers_
将包含簇,而 y_km
将包含质心点。