我有一个文本文件包含一个列表(#lines = 1137)的向量(所有大小相等= 1137),我试图将此列表转换为1137 * 1137矩阵。我用numpy创建了一个空矩阵。但是当我使用以下代码读取文件后,问题被视为一系列字符,而不是矢量或数组
myMtrx = np.empty((1137,1137))
f = open("text.txt", "r")
for vector in f:
print len(vector)
arrayF.append(vector.rstrip())
我认识到通过打印每个向量的长度,这是根据数字的数量而不是该向量中的元素计算的。文本文件中的向量看起来像
[99.25, 14.74, 26.12, 20.91, 37.14, 79.03, 17.68, 28.4, ...., 0]
所以当我打印print arrayF[0][0]
时,我收到[
,我需要输出作为第一个矢量的第一个元素,即99.25。
我尝试了几种使用numpy的方法,并将文本文件写入CSV但没有任何效果,请你协助我解决这个问题。您可以通过以下链接访问文本文件,让您了解其结构。 text.txt
答案 0 :(得分:1)
您正在从文件中读取字符串,您需要转换为列表。像这样的解决方案可以解决这个问题:
for line in f:
vector = line.strip("[]").split(",")
...
strip
:删除" []"中的所有字符从字符串的开头和结尾split
:将字符串转换为列表,切割每个","位置答案 1 :(得分:0)
从字符串开始,您需要执行以下步骤以从中获取数字列表:
strip
摆脱[]
split(",")
在每个逗号分割字符串并创建字符串列表然后你应该把它放到你的numpy矩阵中。如果使用numpy,则没有必要使用map(float, vector)
,因为numpy会推断它们是自动浮动的。
以下是示例代码:
myMtrx = np.empty((1137,1137))
f = open("text.txt", "r")
for idx, vector in enumerate(f):
# vector = '[99.25, 14.74, 26.12, 20.91, 37.14, 79.03, 17.68, 28.4, 0]'
vector = list(map(float, vector.strip("[]\n").split(",")))
myMtrx[idx ,:] = vector
答案 2 :(得分:0)
我会这样做:
f = open('first.txt').readlines()
f = [i.strip('\n') for i in f]
new_list = []
final_list = []
for i in f:
new_list.append(i.split(' '))
for i in new_list:
final_list.append(map(int, i))
print final_list
我们将内容读入f,在空格中将它们分开并将它们附加到new_list,然后映射到所形成的矩阵中的每个字符串行,并将其附加到final_list,这将为您提供所需的矩阵。