首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >加速代数计算

加速代数计算
EN

Stack Overflow用户
提问于 2020-04-04 02:36:52
回答 2查看 62关注 0票数 0

我有1000个文本文件,包括6列,我必须计算一个简单的代数操作,使用每个文件中的come列,然后绘制一个简单的结果图,但这花费了6个多小时的计算时间。对于这个小东西来说,花了那么多时间,这有点奇怪。代码如下:

代码语言:javascript
复制
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()

所有的帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

发布于 2020-04-04 05:29:55

您可以使用多线程或多处理来加速此过程。最简单的方法是使用线程模块。

Python Documentation: Threading

一个简单的例子:

代码语言:javascript
复制
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模块。队列包含所有文件的路径,线程一个接一个地挑选要处理的文件。

Python Documentation: Queue

一个简单的例子:

代码语言:javascript
复制
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模块。这几乎与线程化示例的工作原理类似。

Python Documentation: concurrent.futures

票数 1
EN

Stack Overflow用户

发布于 2020-05-08 09:10:15

为了解决数学和任何代数运算,首先要考虑到,要准备一个空空间来保存变量值。这对提高代码的效率有很大的贡献,比如先使用my_list=[],然后再使用my_list.append(var)。另一种方法是使用已准备好的库,而不是从头开始编写。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61018385

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档