我想从一个三列文件创建一个矩阵。 我相信这是一件非常容易的事情,但我只是不明白该怎么做。请温柔一点,我是Python初学者。 谢谢你
输入文件的格式
A A 5
A B 4
A C 3
B B 2
B C 1
C C 0
期望输出-完整矩阵
A B C
A 5 4 3
B 4 2 1
C 3 1 0
或-半矩阵
A B C
A 5 4 3
B 2 1
C 0
我试过这个,但正如我所说,我对python和编程非常陌生。
import numpy as np
for line in file('test').readlines():
name1, name2, value = line.strip().split('\t')
a = np.matrix([[name1], [name2], [value]])
print a
工作脚本-我的一个朋友也帮了我,所以如果有人对一个更简单的脚本感兴趣,这里是。它不是最有效的,但工作得很好。
data = {}
names = set([])
for line in file('test').readlines():
name1, name2, value = line.strip().split('\t')
data[(name1, name2)] = value
names.update([name1])
names = sorted(list(names))
print names
print data
output = open('out.txt', 'w')
output.write("\t%s\n" % ("\t".join(names)))
for nameA in names:
output.write("%s" % nameA)
for nameB in names:
key = (nameA, nameB)
if key in data:
output.write("\t%s" % data[(nameA, nameB)])
else:
output.write("\t")
output.write("\n")
output.close()
你可以用这个图书馆 http://docs.scipy.org/doc/numpy/reference/generated/numpy.matrix.html
你只需要做适当的调整。
希望有帮助。
尝试:
输出:
array([[ 5., 4., 3.], [ nan, 2., 1.], [ nan, nan, 0.]])
虽然已经有一个公认的答案,但它使用熊猫。获得相同效果但不使用附加库的一种相对通用的方法是:(使用numpy是因为OP指定了numpy,但是可以使用list实现相同的效果)
想法是你收集所有的字母,希望OP将自己限制在没有特殊字符的英语字母表(觉嫱嫱嫱嫱嫱嫱嫱嫱嫱°e等)。
我们从字母表中创建一个列表,以便可以使用
index
方法来检索索引值。一、 e.uppercase.index("A")
是0
。我们可以使用这些索引来填充数组。逐行读取文件,删除多余字符,按空格拆分以获取:
现在这是实际的工作部分:
也就是说,对于字母“A”,
idx
的计算结果是0
,而idy
的计算结果也是0
。然后matrix[0,0]
成为值tmp[2]
,即4
。按照“B”的相同逻辑,我们得到matrix[0,1]=5
。等等。更普遍的情况是将
matrix = np.zeros((3, 3))
声明为matrix = np.zeros((26, 26))
,因为英语字母表中有26个字母,OP不必只使用“ABC”,而是可能使用整个范围A-Z上层程序的输出示例如下:
相关问题 更多 >
编程相关推荐