Python 读取文件时,会将值列表放入数组中
我有一个大的文本文件,它是一些代码的输出,它包含数字列表。文件中列表的格式如下所示Python 读取文件时,会将值列表放入数组中,python,list,numpy,Python,List,Numpy,我有一个大的文本文件,它是一些代码的输出,它包含数字列表。文件中列表的格式如下所示 [ 11.42102518 3.3538624 231.82137052 352.12777653] [ 12.68274035 2.84982539 292.99135783 331.74058558] [ 11.34657161 3.38423623 265.82486527 335.52547905] [ 12.74354078 3.57487634
[ 11.42102518 3.3538624 231.82137052 352.12777653] [ 12.68274035 2.84982539 292.99135783 331.74058558] [ 11.34657161 3.38423623 265.82486527 335.52547905] [ 12.74354078 3.57487634 241.38692542 322.61793392] [ 12.34540891 7.43226428 241.87210696 364.56618065] [ 12.11139764 4.19664745 239.1656334 321.70798174] [ 12.78659285 5.29236544 232.36062356 315.21861344] [ 12.69345477 3.21991939 285.64027138 356.25664941] [ 12.50813292 3.81440083 277.67523696 334.8178125 ] [ 13.1380115 2.84102649 270.39461828 357.04828265] [ 14.07759576 2.32715376 287.91432844 326.39725223] [ 11.85596781 4.0823778 290.16288598 353.67141937] [ 15.40525653 2.91725879 261.31334931 362.72949817] [ 15.01504576 2.46403931 275.26133082 333.77638185] [ 15.28245578 2.98091548 247.72494962 311.64421065] [ 13.49572046 2.52735399 265.58225678 332.79688739] [ 12.82575874 3.98127768 230.90060671 312.34328907] [ 16.76159178 4.02880401 281.66098464 320.10349045]
在每个500*20列表之后,有一个新行\n
分隔
我想把它们读入
Nx4
的numpy数组中。我不知道文件中存在列表的确切数量。如何操作?首先,您需要从文件的开头和结尾删除[,]。第二步,拆分数组,最后一步拆分元素并放入数组缓冲区
buff = []
for line in open("file.txt"):
for arr in line[1:-1].strip().split("]\t[")
row = []
for el in arr.strip().split("\t")):
row.append(float(el))
buff.append(row)
此代码将所有数字存储在一个数组中!!我不确定这是否是你真正想要的!:)
由于输入文件包含未知数量的列表列表,其中每个列表包含20个包含4个元素的列表,我希望将它们全部读取到一个包含4列的数组中,因此到目前为止,我遇到的组合所有列表并创建一个包含4列的大数组的最佳方法如下:
f = open('sampler_chain.dat').read()
ndim=4
import numpy as np
import re
pattern = re.compile("^[0-9]")
data = np.zeros((1,ndim),float)
i=0;dl=[]
for x in f.split():
if pattern.match(x):
m = re.match(r"(\d+)\.(\d+)", x)
x=m.group(0)
print x
if ((i/4==0) and (i%4<4)):
data[i/4,i%4]=float(x)
elif ((i/4>0) and (i%4<4)):
dl.append(float(x))
if (i%4==3) and (i/4>0):
data=np.append(data,[dl],axis=0)
dl=[]
i+=1
else:
continue
f=open('sampler_chain.dat')。read()
ndim=4
将numpy作为np导入
进口稀土
模式=重新编译(“^[0-9]”)
数据=np.零((1,ndim),浮点)
i=0;dl=[]
对于f.split()中的x:
如果模式匹配(x):
m=重新匹配(r“(\d+)\(\d+),x)
x=m.组(0)
打印x
如果((i/4==0)和(i%40)和(i%40):
data=np.append(数据[dl],轴=0)
dl=[]
i+=1
其他:
持续
问题是,这种方法的速度不够快,无法读取一个庞大的数据文件……它们代表什么?这些列是独立的行,并且它们总是包含相同数量的元素吗?在这个文件中是否有回车符?@EdChum它们是蒙特卡罗马尔可夫链代码的输出,即
emcee
,等等列表具有相同的长度,四个元素数。代码在每次迭代中生成20*500个元素列表并附加到文件中。您的答案有两个错误:第一,它不返回数组。第二,\u array
列表中的元素是string
,最后返回一个大的纠缠列表我很抱歉,兄弟…现在就试试嘿@Dalek如果你认为能解决你的问题,请把我的答案标记为正确答案!!谢谢:)不,我不这么认为,因为它不能解决我的问题。那是不可能的。。当你运行它时会得到什么?
f = open('sampler_chain.dat').read()
ndim=4
import numpy as np
import re
pattern = re.compile("^[0-9]")
data = np.zeros((1,ndim),float)
i=0;dl=[]
for x in f.split():
if pattern.match(x):
m = re.match(r"(\d+)\.(\d+)", x)
x=m.group(0)
print x
if ((i/4==0) and (i%4<4)):
data[i/4,i%4]=float(x)
elif ((i/4>0) and (i%4<4)):
dl.append(float(x))
if (i%4==3) and (i/4>0):
data=np.append(data,[dl],axis=0)
dl=[]
i+=1
else:
continue