怎么理解这段代码: def load_embedding(filename): geneList = list() vectorList = list() f = open(filename) for line in f: values = line.split() gene = values[0] vector = np.asarray(values[1:], dtype="float32") geneList.append(gene) vectorList.append(vector) f.close() return np.asarray(vectorList), np.asarray(geneList) embeddings_file = "../pre_trained_emb/gene2vec_dim_200_iter_9.txt" wv, vocabulary = load_embedding(embeddings_file) indexes = list(range(len(wv))) random.shuffle(indexes) topN = len(wv) rdWV = wv[indexes][:topN,:] rdVB = vocabulary[indexes][:topN] print("PCA!") pca = PCA(n_components=50) pca.fit(rdWV) pca_rdWV=pca.transform(rdWV) print("PCA done!") print("tsne!") with open("../TSNE_label_gene2vec.txt", 'w') as out: for str in rdVB: out.write(str + "\n") out.close() def TSNEWoker (iter): print(iter+" begin") tsne = TSNE(n_components=2, perplexity=30, n_iter=int(iter), learning_rate=200, n_jobs=32) np.set_printoptions(suppress=True) # save tsne data Y = tsne.fit_transform(pca_rdWV) np.savetxt("../TSNE_data_gene2vec.txt_"+iter+".txt",Y) print(iter+" tsne done!") def mp_handler(): p = Pool(6) p.map(TSNEWoker, ["100","5000","10000","20000","50000","100000"]) #generate tsne of different iteration in parallel if __name__ == '__main__': # TSNEWoker("5000") mp_handler()
这段代码主要是用于加载嵌入矩阵数据,进行PCA降维和TSNE可视化操作。下面是代码的解释:
load_embedding
函数用于加载文件中的嵌入矩阵数据。它首先创建两个空列表geneList
和vectorList
,然后打开指定的文件。对于文件中的每一行,它使用split()
方法将行拆分为单词列表values
,其中第一个值是基因名称gene
,其余值是嵌入向量vector
。然后将gene
添加到geneList
中,将vector
添加到vectorList
中。最后将两个列表转换为NumPy数组并返回。embeddings_file
是嵌入文件的路径,通过调用load_embedding(embeddings_file)
加载嵌入矩阵数据,并将返回的嵌入矩阵存储在变量wv
中,基因名称存储在变量vocabulary
中。indexes
是一个包含从0到wv
的长度的列表,然后使用random.shuffle()
方法对其进行随机打乱。topN
是要保留的嵌入矩阵的前N个向量。rdWV
是通过使用索引和切片操作从wv
中选择前N个向量,并将其存储在新的变量中。rdVB
是通过使用索引和切片操作从vocabulary
中选择前N个基因名称,并将其存储在新的变量中。代码中的
print("PCA!")
和print("tsne!")
是为了在控制台输出一些信息。使用
PCA
类对rdWV
进行主成分分析降维,将维度减少为50,并将结果存储在pca_rdWV
中。使用
open()
函数创建一个名为 "TSNE_label_gene2vec.txt" 的文件,并将rdVB
中的基因名称逐行写入该文件。TSNEWoker
函数用于执行TSNE操作。它接受一个参数iter
,并创建一个TSNE
类的实例,指定了一些参数。然后使用fit_transform()
方法对pca_rdWV
进行TSNE降维,并将结果保存到文件 "TSNE_data_gene2vec.txt_"+iter+".txt" 中。mp_handler
函数使用Pool
类创建一个进程池,并调用p.map()
方法将TSNEWoker
函数应用于不同的迭代次数。最后,通过检查是否是主程序来执行代码。在这里,我们调用了
mp_handler()
函数,以并行方式生成不同迭代次数的TSNE可视化。
相关推荐

















