2

也许是一个非常模糊的问题,但挖掘 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 不是存储二进制数组以进行进一步相似度矩阵计算的正确方法?

4

1 回答 1

6

Numpy 并不真正支持行名。它通过结构化数组支持列名。你可以使用类似的东西dtype=[('name', object), ('val1', int), ...]。这也可以通过读取文件的第一行来自动化,也许。

给你genfromtxt的只是一个 type 的数组object,其中一列恰好包含字符串,而其他列恰好包含整数——但它们都以 Python 对象的形式存储,效率低下,而不是以高效的格式存储。

您可能对pandas感兴趣,它扩展了 numpy 矩阵并支持标记行(以及许多其他内容)。pandas.read_table将很好地处理您的文件。

于 2013-08-15T15:43:32.023 回答