リストまたは numpy 配列にロードする非常に大きなデータ .dat ファイルがあります。ファイルには値の列が含まれており、最後の列は値を配列にロードする回数の乗数です。したがって、それをロードするときは、それを考慮して 2 番目のサブループを実行する必要があります。これは、場合によっては 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)
コメント/提案をありがとう。