我正在使用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
的目的答案 0 :(得分:0)
您在此处显示的代码只会打开给定的mat
或h5
文件。文件路径(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()