Python中的六角自组织映射

Python中的六角自组织映射,python,module,artificial-intelligence,neural-network,self-organizing-maps,Python,Module,Artificial Intelligence,Neural Network,Self Organizing Maps,我正在寻找Python上的六边形。 就绪模块。如果有的话 六角晶胞的作图方法 将六边形单元用作阵列或smth else的算法 关于: 自组织映射(SOM)或自组织特征映射(SOFM)是一种人工神经网络,使用无监督学习进行训练,以生成低维(通常是二维)我对第1点没有答案,但对第2点和第3点有一些提示。在您的上下文中,您不是在为物理二维空间建模,而是一个具有6个相邻平铺的概念空间。这可以用排列成柱的方形瓷砖来模拟,奇数柱垂直移动了正方形大小的一半。我将尝试使用ASCII图表: ___ _

我正在寻找Python上的六边形

  • 就绪模块。如果有的话
  • 六角晶胞的作图方法
  • 将六边形单元用作阵列或smth else的算法
  • 关于
    自组织映射(SOM)或自组织特征映射(SOFM)是一种人工神经网络,使用无监督学习进行训练,以生成低维(通常是二维)

    我对第1点没有答案,但对第2点和第3点有一些提示。在您的上下文中,您不是在为物理二维空间建模,而是一个具有6个相邻平铺的概念空间。这可以用排列成柱的方形瓷砖来模拟,奇数柱垂直移动了正方形大小的一半。我将尝试使用ASCII图表:

     ___     ___     ___     
    |   |___|   |___|   |___
    |___|   |___|   |___|   |
    |   |___|   |___|   |___|
    |___|   |___|   |___|   |
    |   |___|   |___|   |___|
    |___|   |___|   |___|   |
        |___|   |___|   |___|
    
    你可以很容易地看到每个正方形都有6个邻居(当然除了边缘的邻居)。这可以很容易地建模为二维正方形数组,计算位置(i,j)处正方形坐标的规则非常简单,i是行,j是列:

    如果j是偶数:

    (i+1, j), (i-1, j), (i, j-1), (i, j+1), (i-1, j-1), (i+1, j-1)
    
    如果j是奇数:

    (i+1, j), (i-1, j), (i, j-1), (i, j+1), (i+1, j-1), (i+1, j+1)
    

    (前4个术语是相同的)

    我知道这个讨论已经进行了4年,但是我还没有在网上找到满意的答案

    如果你有一个数组,将输入映射到神经元,还有一个与每个神经元的位置相关的二维数组

    例如,考虑这样的事情:

    hits = array([1, 24, 14, 16,  6, 11,  8, 23, 15, 16, 15,  9, 20,  1,  3, 29,  4,
                  32, 22,  7, 26, 26, 35, 23,  7,  6, 11,  9, 18, 17, 22, 19, 34,  1,
                  36,  3, 31, 10, 22, 11, 21, 18, 29,  3,  6, 32, 15, 30, 27],
                 dtype=int32)
    centers = array([[ 1.5       ,  0.8660254 ],
                     [ 2.5       ,  0.8660254 ],
                     [ 3.5       ,  0.8660254 ],
                     [ 4.5       ,  0.8660254 ],
                     [ 5.5       ,  0.8660254 ],
                     [ 6.5       ,  0.8660254 ],
                     [ 1.        ,  1.73205081],
                     [ 2.        ,  1.73205081],
                     [ 3.        ,  1.73205081],
                     [ 4.        ,  1.73205081],
                     [ 5.        ,  1.73205081],
                     [ 6.        ,  1.73205081],
                     [ 1.5       ,  2.59807621],
                     [ 2.5       ,  2.59807621],
                     [ 3.5       ,  2.59807621],
                     [ 4.5       ,  2.59807621],
                     [ 5.5       ,  2.59807621],
                     [ 6.5       ,  2.59807621],
                     [ 1.        ,  3.46410162],
                     [ 2.        ,  3.46410162],
                     [ 3.        ,  3.46410162],
                     [ 4.        ,  3.46410162],
                     [ 5.        ,  3.46410162],
                     [ 6.        ,  3.46410162],
                     [ 1.5       ,  4.33012702],
                     [ 2.5       ,  4.33012702],
                     [ 3.5       ,  4.33012702],
                     [ 4.5       ,  4.33012702],
                     [ 5.5       ,  4.33012702],
                     [ 6.5       ,  4.33012702],
                     [ 1.        ,  5.19615242],
                     [ 2.        ,  5.19615242],
                     [ 3.        ,  5.19615242],
                     [ 4.        ,  5.19615242],
                     [ 5.        ,  5.19615242],
                     [ 6.        ,  5.19615242]])
    
    因此,我将使用以下方法执行此操作:

    from matplotlib import collections, transforms
    from matplotlib.colors import colorConverter
    from matplotlib import cm
    import matplotlib.pyplot as plt
    import numpy as np
    
    def plot_map(hits, n_centers, w=10):
        """
        Plot Map
        """
    
        fig = plt.figure(figsize=(w, .7 * w))
        ax = fig.add_subplot(111)
        hits_count = np.histogram(hits, bins=n_centers.shape[0])[0]
        # Discover difference between centers
        collection = RegularPolyCollection(
            numsides=6, # a hexagon 
            rotation=0, sizes=( (6.6*w)**2 ,),
            edgecolors = (0, 0, 0, 1),
            array= hits_count,
            cmap = cm.winter,
            offsets = n_centers,
            transOffset = ax.transData,
        )
        ax.axis('off')
        ax.add_collection(collection, autolim=True)
        ax.autoscale_view()
        fig.colorbar(collection)
        return ax
    
    _ = plot_map(som_classif, matrix)
    
    最后我得到了这个输出:

    编辑


    此代码的更新版本在

    @S.Lott上:自组织映射是一种人工智能算法。看看你在找什么?这是一个关于自组织算法的AI问题,还是一个关于绘制六边形的图形问题,还是一个关于如何表示曲面六边形平铺的数据表示问题?