也许是一个非常模糊的问题,但是挖掘 numpy 上的链接对我没有帮助。
我需要使用以下分层聚类对如下所示的二进制数组进行相似度矩阵计算
name val1 val2 val3 val4 val5
comp1 0 0 1 0 1
comp2 1 0 0 0 0
comp3 0 0 1 0 0
comp4 1 1 0 0 0
comp5 0 0 1 0 0
我不明白 numpy 中行名称的概念。我可以这样读取文件
test = np.genfromtxt('test.b', delimiter='\t', names = True, dtype = None)
print type(test[0])
numpy.void
print test[0]
('comp1',0, 0, 1, 0, 1)
但是如何考虑行名称(这个信息非常重要)?是否可以?
我认为 void 不是存储二进制数组以进行进一步相似度矩阵计算的正确方法?
Numpy 并不真正支持行名称。它确实支持列名称,通过结构化数组 http://docs.scipy.org/doc/numpy/user/basics.rec.html。你可以使用类似的东西dtype=[('name', object), ('val1', int), ...]
。也许也可以通过读取文件的第一行来自动化。
What genfromtxt
给你的只是一个类型数组object
,其中一列恰好包含字符串,其他列恰好包含整数 - 但所有这些都以 Python 对象的形式存储,而不是以有效的格式存储,效率很低。
您可能感兴趣pandas http://pandas.pydata.org/,它扩展了 numpy 矩阵,支持标记行(以及许多其他内容)。pandas.read_table http://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_table.html?highlight=read_table#pandas.read_table会很好地处理你的文件。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)