【问题标题】:Centroid of the group of closest spatial points in PythonPython中最近空间点组的质心
【发布时间】:2021-01-07 04:58:36
【问题描述】:

我有一个 numpy 数组的行和列索引列表,如下所示。我需要找到并返回最近间隔点的质心的行和列索引。

(array([1389, 1389, 1390, 1390, 1391, 1391, 1392, 1392, 1393, 1393, 1394,
    1394, 1395, 1395, 1396, 1396, 1397, 1397, 1398, 1398, 1399, 1399,
    1400, 1400, 1401, 1401, 1523, 1524, 1524, 1525, 1525, 1526, 1526,
    1527, 1527, 1528, 1528, 1529, 1529, 1530, 1530, 1531, 1531, 1532,
    1532, 1533, 1533, 1534, 1534, 1535, 1535, 1536, 1536, 1659, 1660,
    1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671,
    1672, 1929, 1930, 1931, 1932, 1932, 1932, 1932, 1932, 1932, 1933,
    1934, 1934, 1934, 1934, 1934, 1934, 1934, 1935, 1935, 1935, 1935,
    1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1936, 1936, 1936,
    1936, 1936, 1936, 1936, 1936, 1937, 1937, 1937, 1937, 1937, 1937,
    1937, 1937, 1937, 1937, 1937, 1937, 1937, 1938, 1939, 1940, 1940,
    1941, 1942, 2064, 2064, 2064, 2065, 2066, 2066, 2067, 2067, 2067,
    2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2069,
    2069, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2071, 2071, 2071,
    2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2072, 2072,
    2072, 2072, 2072, 2072, 2072, 2072, 2073, 2073, 2075, 2075, 2075,
    2076, 2076, 2077, 2199, 2200, 2200, 2201, 2201, 2202, 2202, 2202,
    2202, 2202, 2202, 2202, 2202, 2202, 2202, 2203, 2203, 2203, 2203,
    2203, 2203, 2204, 2204, 2204, 2204, 2204, 2205, 2205, 2205, 2205,
    2205, 2205, 2205, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206,
    2206, 2206, 2206, 2206, 2207, 2207, 2207, 2207, 2207, 2207, 2207,
    2207, 2208, 2208, 2209, 2209, 2210, 2211, 2211, 2211, 2212, 2338,
    2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2339,
    2339, 2339, 2339, 2340, 2340, 2340, 2340, 2341, 2341, 2341, 2341,
    2341, 2342, 2342, 2342, 2342, 2474, 2474, 2474, 2474, 2474, 2474,
    2474, 2474, 2474, 2474, 2474, 2475, 2475, 2475, 2475, 2475, 2475,
    2475, 2475, 2475, 2609, 2609, 2609, 2609, 2609, 2609, 2609, 2609,
    2609, 2609, 2609, 2609], dtype=int64),


array([1562, 1563, 1562, 1563, 1562, 1563, 1562, 1563, 1562, 1563, 1562,
        1563, 1562, 1563, 1562, 1563, 1562, 1563, 1562, 1563, 1562, 1563,
        1562, 1563, 1562, 1563, 1642, 1642, 1643, 1642, 1643, 1642, 1643,
        1642, 1643, 1642, 1643, 1642, 1643, 1642, 1643, 1642, 1643, 1642,
        1643, 1642, 1643, 1642, 1643, 1642, 1643, 1642, 1643, 1720, 1720,
        1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720,
        1720, 1878, 1878, 1878, 1871, 1876, 1877, 1878, 1880, 1881, 1878,
        1876, 1877, 1878, 1880, 1881, 1882, 1884, 1872, 1873, 1876, 1877,
        1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1873, 1876, 1877,
        1878, 1880, 1881, 1882, 1884, 1872, 1873, 1874, 1875, 1876, 1877,
        1878, 1879, 1880, 1881, 1882, 1883, 1884, 1878, 1878, 1878, 1880,
        1878, 1878, 1957, 1958, 1959, 1959, 1957, 1959, 1957, 1958, 1959,
        1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1961, 1957,
        1959, 1952, 1953, 1957, 1958, 1959, 1961, 1965, 1950, 1951, 1952,
        1953, 1954, 1955, 1956, 1957, 1958, 1959, 1961, 1964, 1952, 1953,
        1954, 1956, 1957, 1958, 1959, 1961, 1957, 1959, 1957, 1958, 1959,
        1957, 1959, 1958, 2037, 2036, 2037, 2036, 2037, 2030, 2031, 2033,
        2034, 2035, 2036, 2037, 2038, 2039, 2040, 2030, 2031, 2036, 2037,
        2038, 2043, 2030, 2031, 2036, 2037, 2038, 2030, 2031, 2036, 2037,
        2038, 2043, 2044, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037,
        2038, 2039, 2040, 2041, 2035, 2036, 2037, 2038, 2039, 2040, 2043,
        2044, 2036, 2037, 2036, 2037, 2037, 2036, 2037, 2038, 2036, 2110,
        2111, 2113, 2114, 2115, 2116, 2118, 2119, 2120, 2121, 2122, 2110,
        2111, 2120, 2121, 2110, 2111, 2120, 2121, 2110, 2111, 2113, 2120,
        2121, 2110, 2111, 2120, 2121, 2187, 2188, 2189, 2190, 2191, 2193,
        2194, 2196, 2197, 2198, 2199, 2187, 2188, 2189, 2190, 2191, 2194,
        2197, 2198, 2199, 2266, 2267, 2268, 2269, 2270, 2271, 2273, 2274,
        2275, 2276, 2277, 2278], dtype=int64))

这些应该返回 5 个质心行和列索引,因为空间上有 5 个组。

我尝试使用距离公式计算距离。但这似乎很复杂。然后我尝试对每个行和列索引进行分组。但这似乎也不起作用,因为重复项正在被消除。

【问题讨论】:

    标签: python points closest centroid


    【解决方案1】:

    我找到了解决问题的方法。 可以使用简单的 k-means 分类来计算点的空间质心。让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 将包含聚类,km.cluster_centers_ 将包含质心点。

    【讨论】:

      猜你喜欢
      • 2014-03-06
      • 2023-03-28
      • 2018-07-02
      • 2019-03-06
      • 1970-01-01
      • 2018-05-14
      • 1970-01-01
      • 2020-04-19
      • 2017-02-07
      相关资源
      最近更新 更多