用于光谱聚类的Python输入

时间:2018-06-14 02:43:21

标签: python io

我正在使用https://github.com/pin3da/spectral-clustering/blob/master/spectral/utils.py中的代码对https://cs.joensuu.fi/sipu/datasets/s1.txt

中的数据进行频谱聚类

我可以知道如何更改代码,以便它可以将txt文件作为输入吗? 我已经在下面给出了原始代码以供参考

GitHub的原始代码

 import numpy
 import scipy.io
 import h5py


def load_dot_mat(path, db_name):
     try:
        mat = scipy.io.loadmat(path)
     except NotImplementedError:
          mat = h5py.File(path)

    return numpy.array(mat[db_name]).transpose()

我不明白变量 db_name

的目的

1 个答案:

答案 0 :(得分:0)

您在此处显示的代码只会打开给定的math5文件。文件路径(path)和文件中的数据集名称(db_name)作为load_dot_mat函数的参数提供。

要加载txt文件,我们可以创建自己的小加载函数:

def load_txt(filename):
    with open(filename, "r") as f:
        data = [[int(x) for x in line.split(" ") if x != ""] for line in f]
    return np.array(data)

此函数将“txt”文件的路径作为参数,返回带有文件数据的numpy数组。数据数组具有您提供的文件的形状(5000,2)。如果其他文件包含浮点值而不仅仅是整数,则可能需要使用float而不是int

您数据的完整群集步骤可能如下所示:

from itertools import cycle, islice
import matplotlib.pyplot as plt
import numpy as np
import seaborn
from spectral import  affinity, clustering

seaborn.set()


def load_txt(filename):
    with open(filename, "r") as f:
        data = [[int(x) for x in line.split(" ") if x != ""] for line in f]
    return np.array(data)


data = load_txt("s1.txt")

A = affinity.com_aff_local_scaling(data)
n_cls = 15  # found by looking at your data
Y = clustering.spectral_clustering(A, n_cls)
colors = np.array(list(islice(cycle(seaborn.color_palette()), int(max(Y) + 1))))
fig = plt.figure(1)
ax = fig.add_subplot(111)
ax.scatter(data[:, 0], data[:, 1], color=colors[Y], s=6, alpha=0.6)
plt.show()

enter image description here