python - 用于光谱聚类的 Python 输入
问题描述
我正在使用 https://github.com/pin3da/spectral-clustering/blob/master/spectral/utils.py 中的代码对https://cs.joensuu.fi/sipu/datasets/s1中的数据进行光谱聚类。文本
我可以知道如何更改代码以使其可以将 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的用途
解决方案
您在此处显示的代码只是打开一个给定的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()
推荐阅读
- c++ - 对单链表进行排序时出现运行时错误
- foreach - SwiftUI - ForEach - 类型“_”没有成员“名称”
- python - 计算python中生成器成员资格搜索的执行时间
- android - tns 设备运行 --device 给出无法读取未定义的属性“替换”
- sql - 在 excel 工作表中创建一个表并在表中添加行与循环中的 SQL
- react-native - React Native 应用程序编译但不加载
- python - (Python Numpy)ValueError:操作数无法与形状(0,)(3,)一起广播
- c# - unity如何判断游戏对象的类型?
- css - Unicode CSS 字体真棒图标在 React 中呈现为框
- java - 为什么while循环永远不会结束?