import numpy as np from sompy.sompy import SOMFactory import sompy # using this data, traindata2 lead to bug. traindata1 = np.loadtxt('traindata1.txt', delimiter=',') traindata2 = np.loadtxt('traindata2.txt', delimiter=',') # no nans, no inf. # with this, all data works fine #traindata1=traindata1[1:500,0:20] #traindata2=traindata2[1:500,0:20] # with this, both data lead to bug #traindata1=traindata1[1:200,0:20] #traindata2=traindata2[1:200,0:20] showSOM=False showSOM=~showSOM for (k,traind) in enumerate([traindata1,traindata2]): dlen = len(traind) n = int(np.sqrt(5 * dlen ** 0.54321)) mapsize = [n, n] print(dlen) print(n) som = SOMFactory.build(traind, mapsize, lattice='rect', normalization=None) som.train(n_job=1,verbose=0) print(som.codebook.matrix.shape) np.savetxt('codebook%d.csv' %k,som.codebook.matrix,delimiter=',') if showSOM: sompy.mapview.View2DPacked(50, 50, 'som',text_size=8).show(som)