Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >改进Python 3中滑动窗口片段函数的性能

改进Python 3中滑动窗口片段函数的性能
EN

Stack Overflow用户
提问于 2020-03-05 21:24:56
回答 1查看 93关注 0票数 0

我在Python3.6.8中有一个脚本,它读取一个非常大的文本文件,其中每一行都是从字母表{a,b,c,d,e,f}中提取的一个ASCII字符串。

对于每一行,我有一个函数,它使用大小为k的滑动窗口对字符串进行分段,然后为看到的每个分段将分段计数器字典fragment_dict递增1。

对整个文件使用相同的fragment_dict,并针对映射为零的所有可能的5^k片段对其进行初始化。

我还忽略任何包含字符c的片段。请注意,c并不常见,大多数行根本不会包含它。

代码语言:javascript
运行
AI代码解释
复制
def fragment_string(mystr, fragment_dict, k):
    for i in range(len(mystr) - k + 1):

        fragment = mystr[i:i+k]
        if 'c' in fragment:
            continue

        fragment_dict[fragment] += 1

因为我的文件很大,所以我想尽可能优化上面函数的性能。有没有人能提供任何潜在的优化来使这个功能更快?

我担心我可能会受到Python循环速度的限制,在这种情况下,我需要考虑使用C/Cython。

EN

回答 1

Stack Overflow用户

发布于 2020-03-05 22:18:12

Numpy可能有助于加速您的代码:

代码语言:javascript
运行
AI代码解释
复制
x = np.array([ord(c) - ord('a') for c in mystr])
filter = np.geomspace(1, 5**(k-1), k, dtype=int)
fragment_dict = collections.Counter(np.convolve(x, filter,mode='valid'))

其思想是,表示每个k长度的段是一个k位的5进制数。然后,将等于该字符串的0-5个整数的列表转换为其5元表示形式,相当于使用1,5,25,125,...as过滤器。

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

https://stackoverflow.com/questions/60554173

复制
相关文章
如何在Bash中编写循环?
人们想要学习Unix shell的一个常见原因是释放批处理的功能。如果要对许多文件执行某些操作,一种方法是构造一个遍历这些文件的命令来实现。在编程术语中,这称为执行控制,最常见的示例之一是for循环。
用户6543014
2020/02/21
2.5K0
for循环、递归、回溯
递归:无限调用自身这个函数,每次调用总会改动一个关键变量,直到这个关键变量达到边界的时候,不再调用。
vv彭
2020/10/27
1.2K0
for循环、递归、回溯
循环?还是递归?
--------------------------------------------------------------------------
xcbeyond
2020/03/25
1.2K0
循环?还是递归?
递归改成循环_递归比循环效率高吗
递归容易造成栈溢出,在jdk1.5前虚拟机给每个栈桢的运行空间128kb,在1.5以后为1m的运行空间.递归是指先进后出,也就是说第一进栈的对象会最后一个出站,然后栈桢的空间只有1m,生产环境的数据需要递归的深度,一般情况下我们无法通过测试来进行模拟。所以对于递归的深度不可把控的情况下,是有栈溢出的风险。
全栈程序员站长
2022/09/30
6150
递归改成循环_递归比循环效率高吗
循环、递归与魔术(一)——递归与循环的数理逻辑
今天我们开启一段新的旅程,聊聊循环(circulation)和递归(recursion)背后的数理逻辑以及艺术应用。
magic2728
2019/10/28
1.4K0
循环、递归与魔术(一)——递归与循环的数理逻辑
59 - 递归生成器的编写和使用
请编写一个生成器,将任意多维的列表转换为一维列表 nestedList = [1, [2, 3, [4, 5]], [5, 3, [7, 1, [2, 0]], 7, [1, 7, 5, 3]]] print(nestedList) [1, [2, 3, [4, 5]], [5, 3, [7, 1, [2, 0]], 7, [1, 7, 5, 3]]] def enumList(nestedList): try: for subList in nestedList:
ruochen
2021/06/08
4520
59 - 递归生成器的编写和使用
算法--递归--走台阶问题(2种递归+递归改循环)
一个问题可以分解成若干子问题,且求解思路一样,当到一定的情况下有终止条件,这样的问题可以用递归方法求解
Michael阿明
2021/02/20
2K0
算法--递归--走台阶问题(2种递归+递归改循环)
JavaScript中如何使用递归?
在JavaScript程序中,函数直接或间接调用自己。通过某个条件判断跳出结构,有了跳出才有结果。
Javanx
2019/09/04
2.1K0
JavaScript中如何使用递归?
SQL递归实现循环判断
以前的文章Python小案例(五)循环判断进行分组介绍了如何使用python解决循环判断的问题。现在重新回顾一下这个问题背景:有一列按照某规则排序后的产品,想打包进行组合售卖。要求按顺序进行价格累积,当价格累积超过2000后,需要从下一个产品重新开始打包。
HsuHeinrich
2023/03/29
2.6K0
SQL递归实现循环判断
python中函数递归VS循环
可以理解为在定义的函数内部调用函数自己,形成一个回路。既然形成了一个回路,那么必须要有一个退出的方式。而这种退出的方式一般都是采用条件判断来实现的。
刘金玉编程
2019/08/01
1.7K0
C#如何:编写简单的 Parallel.ForEach 循环
本文档使用 lambda 表达式在 PLINQ 中定义委托。 如果不熟悉 C# 或 Visual Basic 中的 lambda 表达式,请参阅 PLINQ 和 TPL 中的 Lambda 表达式。
全栈程序员站长
2022/09/09
1.6K0
递归与循环的效率迷思
已经不记得最初是从哪里获取的信息了,自己总有一个印象是递归的效率比循环差,因为递归有很大的函数调用开销,再加上递归可能存在的堆栈溢出问题(本文暂不考虑该问题),所以书写代码时还是尽量使用循环为好.
用户2615200
2019/07/02
1.4K0
循环、递归、分治、回溯、动态规划
采用“试错”思想,尝试“分步”去解决问题。在分步的过程中。根据上层结果,尝试此层最优解决此问题,如果此层较于上层不是最优则回溯。
PayneWu
2020/12/18
5760
python如何使用for循环_Python 中for循环的应用
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/170074.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/22
7.2K0
如何使用Pycharm编写项目 「使用教程」
创建新项目 step1: 双击打开 PyCharm,点击 Create New Project:
睡魔的谎言
2021/01/21
2.9K0
python中如何使用for循环_python循环5次
for循环可以把字符串里面的元素都依次取出来,自动赋值给变量i然后再执行循环体内的代码块
全栈程序员站长
2022/09/22
4.9K0
python中如何使用for循环_python循环5次
25.Python的循环与递归
通过让函数不断调用自身,直到函数可以代入给定的初值,这样可以实现递归结构。递归结构往往都可以用循环结构来代替,而且循环结构的执行效率有可能更高,但递归结构更容易理解。 下面的例子实现一个整数累加函数。
用户4381798
2020/08/11
8250
如何使用zx编写shell脚本
在这篇文章中,我们将学习谷歌的zx库提供了什么,以及我们如何使用它来用Node.js编写shell脚本。然后,我们将学习如何通过构建一个命令行工具来使用zx的功能,帮助我们为新的Node.js项目引导配置。
chuckQu
2022/11/28
4.1K0
PHP递归和循环的速度测试
后来想想,以前看书的时候经常说递归函数会浪费堆栈空间,甚至会导致堆栈溢出,于是重新用循环实现了这个函数:
仁扬
2023/06/18
2750
如何在JavaScript中使用for循环
循环允许我们通过循环数组或对象中的项并做一些事情,比如说打印它们,修改它们,或执行其他类型的任务或动作。JavaScript有各种各样的循环,for循环允许我们对一个集合(如数组)进行迭代。
chuckQu
2022/11/28
5.2K0
如何在JavaScript中使用for循环

相似问题

Google Maps折线重叠困境

22

单张-重叠折线的工具提示

12

MSChart折线图标签重叠

11

Google折线图重叠工具提示

21

MPAndroidChart折线图滚动视图重叠

14
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档