python新手(非常酷),第一个问题。我正在读取一个 50+ mb 的 ascii 文件,扫描属性标签并将数据解析为一个 numpy 数组。我在整个循环中放置了计时报告,并找到了罪魁祸首,即使用 np.append() 的 while 循环。想知道有没有更快的方法。
这是一个带有用于调试的假数据的示例输入文件格式:
...标签参数字符名称“Poro”数组浮点数据100
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 38,8071 72 73 74 75 76 77 78 79 80 86 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 尾标 ...
这是代码片段,其中 350k 元素数组的 while 循环需要 70 秒:
def readParameter(self, parameterName):
startTime = time.time()
intervalTime = time.time()
token = "tag parameter"
self.inputBuffer.seek(0)
for lineno, line in enumerate(self.inputBuffer, 1):
if token in line:
line = self.inputBuffer.next().replace('"', '').split()
elapsedTime = time.time() - intervalTime
logging.debug(" Time to readParameter find token: " + str(elapsedTime))
intervalTime = time.time()
if line[2] == parameterName:
line = self.inputBuffer.next()
line = self.inputBuffer.next()
np.parameterArray = np.fromstring(line, dtype=float, sep=" ")
line = self.inputBuffer.next()
**while not "endtag" in line:
np.parameterArray = np.append(np.parameterArray, np.fromstring(line, dtype=float, sep=" "))
line = self.inputBuffer.next()**
elapsedTime = time.time() - startTime
logging.debug(" Time to readParameter load array: " + str(elapsedTime))
break
elapsedTime = time.time() - startTime
logging.debug(" Time to readParameter: " + str(elapsedTime))
logging.debug(np.parameterArray)
np.parameterArray = self.make3D(np.parameterArray)
return np.parameterArray
谢谢,杰夫