[每日一氵] cython 中如何操作字典——结论是没什么更好的方法

news2024/10/9 0:27:06

举个例子,把这个函数写成 cython 的来加速

def insert_cell(ids_dict: dict, __id: str, count: int):
    if __id in ids_dict:
        ids_dict[__id] += count
    else:
        ids_dict[__id] = count

最简单的方式,就是直接扔到 pyx 文件,然后编译一下,速度提升了一倍,setup.py 脚本如下

from distutils.core import setup
from Cython.Build import cythonize

# python -m pip install cython
# python setup.py build_ext --inplace

setup(name="Cython Utils", ext_modules=cythonize("cython_utils.pyx", annotate=True))

annotation 打开的话,都是黄色,笑死

在这里插入图片描述

这篇文章给了一些对应关系
https://blog.csdn.net/wc781708249/article/details/80249166

于是可以简单修改一下,做一下类型转化,我实际测试了下,运行速度和上一版没多大的区别

def insert_cell(ids_dict: dict, _id: str, count: int):

    cdef int __count = count
    # cdef char* __id = _id
    cdef dict __ids_dict = ids_dict

    if _id in __ids_dict:
        __ids_dict[_id] += __count
    else:
        __ids_dict[_id] = __count

我以为是Python的字典没有很好的转化为编译型语言的类型,于是尝试了以下方法,全部转化为C++的类型,结果更慢了hhh
博客中说这不是一个明智的选择,用C++的map去与Python的dict做对应

# distutils: language=c++
from libcpp.map cimport map
from libcpp.string cimport string
# https://stackoverflow.com/questions/32266444/using-a-dictionary-in-cython-especially-inside-nogil

def insert_cell(ids_dict: dict, _id: bytes, count: int):

    cdef int __count = count
    cdef string __id = _id
    cdef map[string, int] __ids_dict = ids_dict

    # cdef map[string, int].iterator end = __ids_dict.end()
    # cdef map[string, int].iterator it  = __ids_dict.begin()

    if _id in ids_dict:
        __ids_dict[_id] += __count
    else:
        __ids_dict[_id] = __count

用这个demo,有个问题:C++的string,在Python3是bytes类型,可能需要修改一下

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2197576.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

学生家长必备,中小学课本教材电子书批量下载工具

今天再整理更新几个最新的电子书教材网站和下载工具 苏生不惑备用号,分享各种黑科技软件资源和技巧,带你玩转互联网。 首先还是国家中小学智慧教育平台这个网站 https://basic.smartedu.cn/elecEdu 还有在线电子教材网站 http://www.haoduoyun.cc/ …

yolov8/9/10/11模型在中医舌苔分类识别中的应用【代码+数据集+python环境+GUI系统】

yolov8、9、10、11模型在中医舌苔分类识别中的应用【代码数据集python环境GUI系统】 背景意义 目前随着人们生活水平的不断提高,对于中医主张的理念越来越认可,对中医的需求也越来越多。 传统中医的舌诊主要依赖于医生的肉眼观察,仅仅通过这…

【RAG论文精读3】RAG论文综述1(2312.10997)-第1部分

收录于我的专栏:AI修炼之路 简介 论文中英文名 Retrieval-Augmented Generation for Large Language Models: A Survey 面向大型语言模型的检索增强生成:综述 论文地址 arxiv地址:https://arxiv.org/abs/2312.10997 精读理由 这篇综述论…

【C语言刷力扣】LCR 182.动态口令

题目: 解题思路: 字符串拼接,先遍历复制从下标为 target 开始的 len - target 位字符,再遍历复制前 target位字符至末尾。 char* dynamicPassword(char* password, int target) {int len strlen(password);// int num 0;int i …

ant-design为input设置默认值,form失效

1.常规input const [inputValue, setInputValue] useState("111");const handleInputChange (e: React.ChangeEvent<HTMLInputElement>) > {setInputValue(e.target.value)};//使用<Input onChange{handleInputChange} value{inputValue}></Inpu…

【C++】:lambda表达式的高级应用

欢迎来到 破晓的历程的 博客 ⛺️不负时光&#xff0c;不负己✈️ 引言 今天 我们来见见lambda表达式的高级用法 用法1&#xff1a;自定义删除器 有些类型的delete方法并不符合自身的析构方法&#xff0c;这时我们就需要自定义删除器。 unique_ptr<FILE> ptr1(fopen…

【java数据结构】ArrayList实例

【java数据结构】ArrayList实例 一、杨辉三角二、打扑克 一、杨辉三角 已知条件&#xff1a;给定行数的大小 思路&#xff1a;首先定义一个二维列表&#xff08;也可以称为集合&#xff09;&#xff0c;我们对每一列处理完&#xff0c;最后把每一列加起来&#xff0c;不就是完整…

构建MySQL健康检查Web应用

构建MySQL健康检查Web应用 在这里将探讨如何将MySQL健康检查功能转换为一个功能完整的Web应用。这个应用允许用户通过简单的Web界面执行MySQL健康检查&#xff0c;并查看详细的结果。我们将逐步介绍代码实现、改进过程以及如何设置和运行这个应用。 1. MySQL健康检查类 首先…

YOLOV5改进系列(2)——CA注意力机制

一、CA注意力机制 1.1 CA注意力机制介绍 Coordinate Attention&#xff08;CA&#xff09;是一种用于移动网络的轻量级注意力机制&#xff0c;旨在在不增加计算成本的前提下增强特征表达能力。与传统的通道注意力机制&#xff08;如Squeeze-and-Excitation&#xff09;不同&am…

修改银河麒麟操作系统V10(SP1)网卡名称为ethx

修改银河麒麟桌面操作系统V10&#xff08;SP1&#xff09;网卡名称为ethx 步骤一&#xff1a;查看当前网卡信息步骤二&#xff1a;修改GRUB配置文件步骤三&#xff1a;更新GRUB配置步骤四&#xff1a;编辑网络接口文件步骤五&#xff1a;重启机器 &#x1f496;The Begin&#…

【电商搜索】现代工业级电商搜索技术-EMNLP2024-无监督的用户偏好学习

【电商搜索】现代工业级电商搜索技术-EMNLP2024-无监督的用户偏好学习 0. 论文信息 Title: Unsupervised Human Preference Learning Authors: Sumuk Shashidhar, Abhinav Chinta, Vaibhav Sahai, Dilek Hakkani Tur Comments: EMNLP 2024 Main Conference https://arxiv.org…

『网络游戏』Tips弹窗队列【10】

修改脚本&#xff1a;DynamicWnd.cs 修改脚本&#xff1a;GameRoot.cs 运行项目 - Tips提示消息按顺序依次弹出显示 修改代码&#xff1a;GameRoot.cs 修改代码&#xff1a;LoginSys.cs 运行项目 设置初始化函数 将CreateWnd设置为隐藏 运行项目 本章结束

YOLO 二元分类器

YOLO 二元分类器 在评估二元分类器性能时&#xff0c;TP、FP、TN和FN是四个核心指标&#xff0c;它们分别代表真阳性、假阳性、真阴性和假阴性。以下是这些指标的定义、计算方法以及在实际应用中的意义&#xff1a; 定义 TP&#xff08;真阳性&#xff09;&#xff1a;模型正…

【多重循环在Java中的应用】

多重循环在Java中的应用 介绍 多重循环是将一个循环嵌套在另一个循环体内的编程结构。Java中的 for、while 和 do...while 循环均可作为外层循环和内层循环。建议使用两层嵌套&#xff0c;最多不超过三层&#xff0c;以保持代码的可读性。 在多重循环中&#xff0c;外层循环执…

POST注入通过sqli-labs靶场less-11

POST注入原理 原理介绍 进入第十一关靶场&#xff0c;我们发现是一个登录窗口&#xff0c;随意提交数据&#xff0c;显示 在url地址进行get提交&#xff0c;发现一直是登录窗口&#xff0c;页面无其他变化&#xff0c;想到post提交注入。 通关原理 打开靶场源码文件。 查看…

ChatGPT+AI项目实战:打造多端智能虚拟数字人

ChatGPTAI项目实战&#xff1a;打造多端智能虚拟数字人 越是就业难的情况下&#xff0c;就要越不断的提升自己的能力。前端开发饱和&#xff0c;Java开发饱和&#xff0c;还有什么不饱和呢&#xff0c;AI开发&#xff01; 本文将详细介绍一门旨在通过项目实战&#xff0c;融合…

图片压缩王2.1.5 | 高效图片处理,无广告无登录

图片压缩王是一款专为安卓用户设计的高效图片处理工具。支持批量压缩、格式转换、缩放和裁剪等功能&#xff0c;无广告无登录&#xff0c;让你专注图片处理。 大小&#xff1a;25M 百度网盘&#xff1a;https://pan.baidu.com/s/1cfNJmy6-KeNtlMJRknMZOA?pwdolxt 夸克网盘&am…

【Linux基础】03 Linux环境基础开发工具使用

1. yum ——软件包管理器 yum 是我们 Linux 预装的一个指令&#xff0c;搜索、下载、、安装对应的软件 yum 相当于 Linux 的应用商店&#xff01; 安装与卸载 yum list | grep command 通过 yum list 命令可以罗列出当前一共有哪些软件包. 由于包的数目可能非常之多, 这里我…

微知-如何通过systemctl查看是否存在某个服务?如何全局查看所有的服务?(systemctl list-units --type=service, )

背景 本文介绍在某些场景需要查看是否启动某个服务&#xff0c; 命令 可以全局服务查看&#xff1a;&#xff08;常用在记不清命令名字&#xff0c;只能记住片段&#xff09; systemctl list-units --typeservice | grep rsh也可以直接查看 systemctl status rshim 或者&a…

【数据分享】1901-2023年我国省市县三级逐月最高气温数据(免费获取/Shp/Excel格式)

之前我们分享过1901-2023年1km分辨率逐月最高气温栅格数据&#xff08;可查看之前的文章获悉详情&#xff09;&#xff0c;该数据来源于国家青藏高原科学数据中心&#xff0c;很多小伙伴拿到数据后反馈栅格数据不太方便使用&#xff0c;问我们能不能把数据处理为更方便使用的Sh…