也许是一个非常模糊的问题,但挖掘 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 并不真正支持行名称。它确实支持列名,通过 structured arrays .您可以使用类似 dtype=[('name', object), ('val1', int), ...]
的内容。也许,这也可以通过读取文件的第一行来实现自动化。
genfromtxt
给你的只是一个 object
类型的数组,其中一列恰好包含字符串,而其他列恰好包含整数——但它们都是存储为 Python 对象的效率低下,而不是高效的格式。
您可能对 pandas 感兴趣,它扩展了 numpy 矩阵,支持标记行(以及许多其他内容)。 pandas.read_table
将很好地处理您的文件。
关于python - Numpy:了解行名称的 numpy 数组概念,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18256220/