cython 编译 - 导入与 cimport

2024-01-05

Cython 新手(也许这是一个基本问题)。考虑两个例子,两者都取自这个博客在这里 http://technicaldiscovery.blogspot.com/2011/06/speeding-up-python-numpy-cython-and.html:

# code 1
import numpy as np

def num_update(u):
    u[1:-1,1:-1] = ((u[2:,1:-1]+u[:-2,1:-1])*dy2 + 
                    (u[1:-1,2:] + u[1:-1,:-2])*dx2) / (2*(dx2+dy2))

and

# code 2
cimport numpy as np

def cy_update(np.ndarray[double, ndim=2] u, double dx2, double dy2):
    cdef unsigned int i, j
    for i in xrange(1,u.shape[0]-1):
        for j in xrange(1, u.shape[1]-1):
            u[i,j] = ((u[i+1, j] + u[i-1, j]) * dy2 +
                      (u[i, j+1] + u[i, j-1]) * dx2) / (2*(dx2+dy2))

假设我使用以下内容编译第一个文件setup.py script:

# setup file for code 1
from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext

ext = Extension("laplace", ["laplace.pyx"],)
setup(ext_modules=[ext], cmdclass = {'build_ext': build_ext})

第二个文件包含以下内容setup.py script:

# setup file for code 2
from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext

import numpy

ext = Extension("laplace", ["laplace.pyx"],
    include_dirs = [numpy.get_include()])

setup(ext_modules=[ext], cmdclass = {'build_ext': build_ext})

在第一种情况下,我使用常规numpy并且没有导入numpy在设置文件中,而在第二种情况下我导入了numpy using cimport,使用声明变量cdef但随后也包括在内numpy在安装文件中。

Cython无论如何都会编译第一个代码(并且第一个代码似乎可以工作)。

使用有什么好处cimport and cdef在使用 Cython 编译之前(通过安装文件)与不使用cimport and cdef在使用 Cython 编译之前(通过安装文件)?


import numpyCython 中与 Python 相同,但是cimport numpy告诉 Cython 加载声明文件:

https://github.com/cython/cython/blob/master/Cython/Includes/numpy/init.pxd https://github.com/cython/cython/blob/master/Cython/Includes/numpy/__init__.pxd

其中声明了所有 C-API 函数、常量和类型,还包括头文件,例如numpy/arrayobject.h.

如果你声明变量np.ndarray[...],Cython 将知道如何将数组元素访问转换为 C 代码,这比 Python 的速度快得多[]操作员。

你需要告诉c编译器numpy头文件在哪里setup.py,所以你打电话numpy.get_include()获取路径。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

cython 编译 - 导入与 cimport 的相关文章

  • 如何在 Apache Airflow 中混合使用 Celery Executor 和 Kubernetes Executor?

    我有多个使用 Celery Executor 的 dag 但我希望使用 Kubernetes Executor 运行一个特定的 dag 我无法推断出一种良好且可靠的方法来实现这一目标 我有一个airflow cfg我在其中声明了Celery
  • 使用 NumPy 函数计算 Pandas 的加权平均值

    假设我们有一个像这样的 pandas 数据框 a b id 36 25 2 40 25 3 46 23 2 40 22 5 42 20 5 56 39 3 我想执行一个操作 a div b 然后按 id 分组 最后使用 a 作为权重计算加权
  • Flurry 登录 Requests.Session() Python 3

    所以我之前回答过这个问题here https stackoverflow com questions 38670599 flurry scraping using python3 requests session 然而 Flurry 网站上
  • python中多个页面的数据串联时出现错误

    我在连接多个页面的数据并将其导出到单个 CSV 文件中时遇到错误 根据我的代码 数据导出到第 10 页 但在第 10 页之后它正在工作 import urllib request from bs4 import BeautifulSoup
  • pyvenv-3.4 返回非零退出状态 1

    我在 Kubuntu 14 04 我想用 python3 4 创建一个 virtualenv 我之前在其他文件夹中使用过 python2 7 但是当我尝试时 pyvenv 3 4 venv 我有 Error Command home fmr
  • 在 Dash 中使用单选项目在图表之间切换

    我是 Dash 新手 我想制作一个带有在两个图表之间切换的单选项目的应用程序 但我不知道该怎么做 任何帮助将不胜感激 我已经写了一段代码 但我不知道我是否接近 如果可能的话 我想在最后制作的散点图和散点图2之间进行交换 import num
  • ctypes c_char_p 的不同行为?

    我对不同版本的 python 的这种行为感到困惑 不明白为什么 Python 2 7 5 default Aug 25 2013 00 04 04 GCC 4 2 1 Compatible Apple LLVM 5 0 clang 500
  • Python3.5 BeautifulSoup4从div中的'p'获取文本

    我试图从 div 类 caselawcontent searchable content 中提取所有文本 此代码仅打印 HTML 不打印网页中的文本 我缺少什么来获取文本 以下链接位于 finteredcasesdoc text 文件中 h
  • 每个值有多个键

    是否可以在 Python 字典中为每个值分配多个键 一种可能的解决方案是为每个键分配值 dict k1 v1 k2 v1 k3 v1 k4 v2 但这并不高效 因为我的数据文件大于 2 GB 否则你可以制作一个字典键的字典 key dic
  • python3中“super”对象没有属性“__getattr__”

    如何覆盖 getattr 使用 python 3 和继承 当我使用以下内容时 class MixinA def getattr self item Process item and return value if known if item
  • 列表值意外变化[重复]

    这个问题在这里已经有答案了 为什么是这个列表r即使我只是想更改列表 也会被更改v 即使它们不指向相同的内存位置 r v list r 2 2 1 2 8 3 10 2 1 8 4 2 4 6 4 for c a in enumerate r
  • Pandas:如何根据另一个数据框的值对数据框上的列求和

    我是 Pandas 新手 我正在尝试做以下事情 我有一个名为的数据框comms包含articleID和commentScore列 等等 我有另一个名为arts带有列文章 ID 我需要创建arts一个名为文章评分 每篇文章必须具有articl
  • 如何使用 win32com.client api 访问 MS Word 的脚注

    我正在尝试使用 win32com client api 访问 MS Word 文件的脚注 我已经用谷歌搜索过 但没能找到合适的方法 我使用 python docx 来实现上述目的 但我发现当前版本的 python docx 无法访问 MS
  • 无法使用 beautifulsoup 模块 python 从 HTML 检索温度值

    我正在使用 BeautifulSoup4 来解析此 HTML 查看源代码 https weather com en IN weather today l 17 39 78 49 https weather com en IN weather
  • 如何只获取父类对象的属性

    我有两节课 class Parent object def init self id name self id id self name name self parent vars id name make a copy def print
  • 初始化 dask 分布式工作线程的状态

    我正在尝试做类似的事情 resource MyResource def fn x something dosemthing x resource return something client Client results client m
  • 更改自动插入 tkinter 小部件的文本颜色

    我有一个文本框小部件 其中插入了三条消息 一条是开始消息 一条是结束消息 一条是在 单位 被摧毁时发出警报的消息 我希望开始和结束消息是黑色的 但被毁坏的消息 参见我在代码中评论的位置 插入小部件时颜色为红色 我不太确定如何去做这件事 我看
  • 表达式中的 Python 'in' 关键字与 for 循环中的比较 [重复]

    这个问题在这里已经有答案了 我明白什么是in运算符在此代码中执行的操作 some list 1 2 3 4 5 print 2 in some list 我也明白i将采用此代码中列表的每个值 for i in 1 2 3 4 5 print
  • Python 3 中“map”类型的对象没有 len()

    我在使用 Python 3 时遇到问题 我得到了 Python 2 7 代码 目前我正在尝试更新它 我收到错误 类型错误 map 类型的对象没有 len 在这部分 str len seed candidates 在我像这样初始化它之前 se
  • 类型错误:只能使用标量值执行操作

    如果您能让我知道如何为所提供的表格绘制一些信息丰富的图表 我将不胜感激here https www iasplus com en resources ifrs topics use of ifrs 例如 我需要一个名为 国内非上市公司 非上

随机推荐

  • 为 Excel 工作表中的不连续单元格着色

    发生的情况是这样的 xlValues被设置为Excel Range object 我也尝试过以下操作 但都给出了相同的错误 xlValueRange xlSheet get Range A1 A5 A15 A25 A50 A65 UsedR
  • API Level 26 以下的 NDK 和 SDK 之间共享内存

    用 C 编写的库会产生连续的数据流 并且必须将其移植到不同的平台上 现在将lib集成到android应用程序中 我试图在NDK和SDK之间创建共享内存 下面是工作片段 原生代码 include
  • 将点表示法的 JavaScript 字符串转换为对象引用

    给定一个 JavaScript 对象 var obj a b 1 c 2 和一个字符串 a b 我怎样才能将字符串转换为点符号 这样我就可以走了 var val obj a b 如果字符串只是 a 我可以用obj a 但这更复杂 我想有一些
  • Xdocument 不打印声明

    我尝试使用domainpeople com API 为此我需要使用XML 目前我有一个错误 说 找不到 apiProtocol 我猜我的 Xml 文档格式错误 当前发送的 xml 是
  • 使用文件签名(.NET)中的幻数来验证文件类型的解决方案?

    我想验证上传文件的类型 假设文件的扩展名不正确 我认为这可以通过检查文件签名的幻数来完成 同样 既然如此在unix中完成 https stackoverflow com questions 2147484 how to get magic
  • 使用 SockJS 提供 auth 标头

    我有一个 Spring MVC 服务器 它提供了一堆 REST 端点以及一个 websocket 端点 除了登录端点之外的所有内容都需要身份验证 我正在使用 JWT 来验证来自客户端的请求 当用户登录时 我返回一个 X AUTH TOKEN
  • 在派生类中强制声明属性

    我最近阅读了有关属性和反射的内容 我认为这将是在我的程序中包含元数据的好方法 我有这个抽象类 我希望从它继承的所有类都用该类声明一些属性 因为我希望为我的程序创建自定义组件 那些派生类 并希望在运行时读取这些类的元数据 但是 派生类都必须显
  • Microsoft Windows Python-3.6 PyCrypto 安装错误

    pip install pycrypto在 python3 5 2 上工作正常 但在 python3 6 上失败并出现以下错误 inttypes h 26 错误 C2061 语法错误 标识符 intmax t Python安装目录下的文件i
  • Laravel:对象或其他结构(数组,json..)到视图?

    您可以通过多种方式将数据传递到 Laravel Blade 视图 在这场精明的讨论中Laravel 隐藏属性 例如密码 安全 https stackoverflow com questions 19033925 laravel hidden
  • 从 R Shiny 数据表中提取过滤器

    我有一个DT数据表 https rstudio github io DT 在 R Shiny 中 我通过设置启用了列过滤filter top within renderDT 我现在想要提取用户应用的过滤器 以便可以将它们保存在服务器端变量中
  • 在dragablz的所有其他选项卡中显示的另一个选项卡中文本框长度相似的虚线:TabablzControl wpf mvvm

    我在用dragablz TabablzControl在 Material Design first 选项卡中 我添加了文本框 但所有其他选项卡都存在与文本框类似长度的虚线 如何删除这条虚线 如果我使用普通选项卡控件 则不存在虚线 我使用时出
  • 在 Haskell 中将列表分组为 n 个元素的列表

    库中是否有对列表进行操作来生成 n 个元素的组 例如 n 3 groupInto 3 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 如果没有 我该怎么做 快速搜索Hoogle http www haskell or
  • TFS 域更改后删除重复的用户

    我们刚刚将 TFS 2013 3 服务器迁移到新域 一切似乎都按计划进行 我迁移了服务器 然后成功迁移了身份 但不是changing用户身份到他们的新域帐户 它刚刚添加了新帐户 所以现在每个人都在系统中twice 一般来说 我已经能够减轻这
  • 从 Scala 宏访问代码文件和行号?

    如何访问 Scala 宏中代码文件的名称和行号 我在看SIP 19 http docs scala lang org sips pending source locations html它说它可以很容易地使用宏来实现 编辑 为了澄清 我想要
  • Slickgrid - 一键复选框?

    当我在 Slickgrid 中创建复选框列 通过使用格式化程序 编辑器 时 我注意到需要单击两次才能与其交互 一次单击聚焦单元格 一次单击与复选框交互 这很有道理 但是 我注意到我可以一键与复选框选择器插件 用于选择多行 进行交互 有什么方
  • 根据 CRAN,什么是一个好的包名称? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我正在寻找一个我想发送到 CRAN 的 R 包的好名字 我没有找到任何有关 R 包命名良好实践的信息 那里是一个帖子 https stackov
  • 是否可以为 LaTeX 编写自己的“包”?

    作为一名程序员 我想知道是否可以为 LaTeX 创建自己的包 我需要类似著名的 列表 包的东西 但更能满足我的需求 我正在寻找一个列表解决方案 该解决方案会留意注释行 例如 BEGIN LISTING 3122 END LISTING 31
  • 类和结构之间的保留循环

    假设我有以下代码 struct X let propertyOfTypeY Y class Y var propertyOfTypeX X let y Y let x X propertyOfTypeY y y propertyOfType
  • 可拖动的内部框架类似于谷歌地图

    一直在玩javascript游戏的思想 特别是RTS类型 问题如下 我如何创建一个可拖动的内部框架 类似于谷歌地图 这个想法是 有一个重叠的 UI 下面有一个更大的可拖动地图 有点类似于您常见的 RTS 游戏 然而 我一直在尝试为这样的界面
  • cython 编译 - 导入与 cimport

    Cython 新手 也许这是一个基本问题 考虑两个例子 两者都取自这个博客在这里 http technicaldiscovery blogspot com 2011 06 speeding up python numpy cython an