我有1000个文本文件,包括6列,我必须计算一个简单的代数操作,使用每个文件中的come列,然后绘制一个简单的结果图,但这花费了6个多小时的计算时间。对于这个小东西来说,花了那么多时间,这有点奇怪。代码如下:
modes = [f for f in sorted(os.listdir('.')) if f.startswith('config')]
maxnum = np.max([int(os.path.splitext(f)[0].split('_')[1]) for f in RIVERS])
modes = ['configuration_%d.out' % i for i in range(maxnum)]
for i, d in enumerate(modes):
a = np.loadtxt(d).T
x = a[0]
y = a[1]
for l in range(len(x)):
l_c = np.sqrt((y[-1]-y[0])**2 + (x[-1]-x[0])**2)
j = a[2]
for k in range(len(j)):
l_i = j[-1]-j[0]
sigma = l_i/l_c
plt.plot(sigma)
#tt = np.arange(0,1000)
#plt.plot(tt,sigma)
plt.show()所有的帮助都将不胜感激。
发布于 2020-04-04 05:29:55
您可以使用多线程或多处理来加速此过程。最简单的方法是使用线程模块。
Python Documentation: Threading
一个简单的例子:
import threading
#Define how many threads you want
numberOfThreads = 5
#Create threads
threads = [threading.Thread(target=myFunction, args=(myArguments,)) for _ in range(0, numberOfThreads)]
#Start all threads
for thread in threads:
thread.start()
#Script waits until last thread has finished
for thread in threads:
thread.join()
def myFunction(myArguments):
#Do calculation如果你有1k个txt文件要处理,我推荐使用Queue模块。队列包含所有文件的路径,线程一个接一个地挑选要处理的文件。
一个简单的例子:
from queue import Queue
#Create Queue object
q = Queue()
#Put item to queue
q.put("/myPath/filename.txt")
#Get and process each item in queue and remove it (so it gets processed only once)
while not q.empty():
myPath = q.get()线程仍然在一个处理器核心上运行。如果速度增益仍然不能令人满意,你应该使用多处理而不是多线程。
我推荐使用concurrent.futures模块。这几乎与线程化示例的工作原理类似。
发布于 2020-05-08 09:10:15
为了解决数学和任何代数运算,首先要考虑到,要准备一个空空间来保存变量值。这对提高代码的效率有很大的贡献,比如先使用my_list=[],然后再使用my_list.append(var)。另一种方法是使用已准备好的库,而不是从头开始编写。
https://stackoverflow.com/questions/61018385
复制相似问题