我有一个非常大的数据 .dat 文件,我正在加载到一个列表或 numpy 数组中。该文件包含值列,最后一列是该值应加载到数组中的次数的乘数。因此,在加载它时,需要运行第二个子循环以考虑到这一点。这样做是为了使总文件大小更小,因为在某些情况下它们会超过 1Gb。
我使用 numpy 预分配零数组与附加到简单列表进行了一些测试,发现附加更快。虽然,在许多帖子中,情况不应该如此。瓶颈在哪里?
if True:
startTime1 = time.clock()
## Numpy way to load up the data
dataAry = np.zeros(TotalSamples)
multiColAry = np.loadtxt(filename,skiprows=2, usecols=(columNum,lastColLoc))
latestLoc = 0
for i in range(0,multiColAry.shape[0]):
curData = multiColAry[i][0]
timesBeenHere = int(multiColAry[i][2])
for j in range(0,timesBeenHere):
dataAry[latestLoc] = curData
latestLoc+=1
endTime1 = time.clock()
totalTime = (endTime1-startTime1) # in seconds
totalTimeString = timeString(totalTime)
if True:
#Old string parsing directly version
startTime1 = time.clock()
totalAccepted = 0
f = open(filename,'r')
dataAry = []
line = 'asdf'
while line!='':
line = f.readline()
if line!='':
dataLineCols = line.split()
dataValue = float(dataLineCols[columNum])
timesBeenHere = float(dataLineCols[-1])
for j in range(0,int(timesBeenHere)):
totalAccepted+=1
dataAry.append(dataValue)
f.close()
endTime1 = time.clock()
totalTime = (endTime1-startTime1) # in seconds
totalTimeString = timeString(totalTime)
感谢您的任何意见/建议。