为什么jupyter笔记本只打印一次cython结果?

2023-12-07

我是 cython 的新手(现在只用它来做一些硬件)。 我使用以下代码在 jupyter Notebook 中查看它的总体思路。

%load_ext Cython
%%cython
def cfunc(int n):
    cdef int a = 0
    for i in range(n):
        a += i
    return a

print(cfunc(10))

但是,它只打印一次结果 45。当我运行打印功能时,单元格不显示 45 人。

代码有问题吗?如何使单元格打印出 45 与普通 python 代码一样?谢谢。


跑步时%%cython-很多魔法都发生在幕后。当以详细模式调用魔法时,人们可以看到它的一部分,即%%cython --verbose:

  1. 一个名为_cython_magic_b599dcf313706e8c6031a4a7058da2a2.pyx被生成。b599dcf313706e8c6031a4a7058da2a2是 sha1 哈希值%%cython-cell,例如,需要它才能重新加载%%cython-细胞(参见这个SO-post).
  2. 该文件被 cythonized 并构建为名为的 c 扩展_cython_magic_b599dcf313706e8c6031a4a7058da2a2.
  3. 该扩展被导入 - 这是您的代码打印 45 的时刻,并且该模块中的所有内容都被添加到全局命名空间中。

如果再次执行该单元,则上述情况都不会发生。这是因为%%Cython机器可以看到单元已经执行并加载 - 因此无需执行任何操作。如果单元格发生更改(因为单元格更改会更改 sha1 哈希)或者重新启动在 Jupyter Lab 中运行的 Python 内核(例如),则将重复上述 3 个步骤。

为了强制执行上述步骤,必须通过--force (or -f) 选项%%cython-magic-cell,即:

%%cython --force
...

# 45 is printed

但是,由于编译 Cython 代码可能非常耗时,因此人们可能更喜欢下面给出的示例之类的内容。

%%cython
def cfunc(int n):
cdef int a = 0
for i in range(n):
    a += i
return a


def cython_main(int arg1):
    # Print the output from calling the funtion
    print(cfunc(arg1))

    # And/or return the output 
    return(cfunc(arg1))

NOTE:
The cython_main()上面给出的函数需要与任何函数位于同一单元格中def, cdef, or cpdef它调用的函数,但从单独的单元格调用以解决OP中提出的打印问题。

这是一个调用的示例cython_main()函数从一个单独的单元格将值 10 传递给cfunc():

result = cython_main(10)

结果是:

45

这解决了OP中描述的打印问题,因为调用cython_main()从外部%%Cythoncell 会强制重新调用 cfunc(),即使该 cell 之前已被执行过。

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

为什么jupyter笔记本只打印一次cython结果? 的相关文章

  • 努力理解 Python 需要虚拟环境的原因

    我来自 JavaScript 所以熟悉 NPM 在那里 您可以全局安装包 通过使用 g 标志 或在项目中本地安装包 在 Python 中 他们有这些虚拟环境 我仍然有点不确定为什么需要它们 我知道这是为了在一台机器上拥有不同版本的相同包 是
  • 分页后重新显示当前标题

    我正在使用 Wea syPrint 创建文档 我有一些带有名称的部分 其中一些可能跨越多个页面 当节太长时 就会出现分页符 我想做的是重新显示当前部分的名称 最好使用相同的格式 以下 MWE 显示了分页符后如何不显示节标题 h1 First
  • 将整数列表划分为总和相等的 K 个子列表

    类似的问题还有1 https stackoverflow com questions 27322804 partition of a set into k disjoint subsets with equal sum and 2 http
  • 无法更改现有 Keras 模型中的激活

    我有一个普通的 VGG16 模型relu激活 即 def VGG 16 weights path None model Sequential model add ZeroPadding2D 1 1 input shape 3 224 224
  • Python启动脚本[重复]

    这个问题在这里已经有答案了 我想执行一个脚本work py在Python中 执行一些初始化脚本后init py 如果我正在寻找交互式会话 请执行python i init py或设置PYTHONSTARTUP path to init py
  • brew install python,但随后:“python-2.7.6 已安装,只是未链接”

    免责声明 菜鸟 操作系统 10 8 5 当我在 bash 中安装 python 时 我得到了这个警告和错误 https i stack imgur com TBgBT png Warning Could not link python Un
  • 如何在 SQLAlchemy 中连接两个表中的数据?

    我有3张桌子 Account User and Organization Account由组成id name and organization id User由组成email and organization id Organization
  • 求 Petersen 子图中的哈密顿路径

    我开始使用 IDE Jupyter Python 3 6 并出现了一个问题 我必须通过IDE绘制Petersen子图中的哈密顿路径 但我不知道该怎么做 我显示有关该图的信息 彼得森图 https en wikipedia org wiki
  • Python - 如何在 Python 中剪切字符串?

    假设我有以下字符串 http www domain com s some two 20 怎样才能脱掉之后的东西 包括 并有这个字符串 http www domain com s some 好吧 回答眼前的问题 gt gt gt s http
  • 如何测试 Flask 开发服务器是否已启动?

    我的 Flask 应用程序上有一个测试装置 它启动开发服务器来测试一些用户交互 对于第一个测试 我想确保服务器已启动 一般而言 无需测试特定响应代码 执行此操作的最佳方法是什么 我希望我能用self assertTrue response
  • lmfit 最小化失败并出现 ValueError:数组太大

    我正在尝试使用 暴力 方法来最小化 20 个变量的函数 它因神秘错误而失败 这是完整的代码 import random import numpy as np import lmfit def progress update params i
  • 从另一个未排序的numpy数组中的数据查找未排序的numpy数组中值的索引位置[重复]

    这个问题在这里已经有答案了 我有一个 numpy 数组 A 其中包含可以按任何顺序排列的唯一 ID 例如A 1 3 2 我有第二个 numpy 数组 B 它记录了 ID 何时被使用 例如B 3 3 1 3 2 1 2 3 1 1 2 3 3
  • Python 单元测试 Google Bigquery

    我在对以下代码块进行单元测试时遇到问题 from google cloud import bigquery from google oauth2 import service account def run query query gcp
  • 如何使用ssl启动flask_socketio应用程序?

    我应该如何使用 SSL 将 app run 转换为 sockio run 我有下面的应用程序启动代码与 Flask 开发服务器一起运行 if name main app run ssl context ssl cert ssl key 我现
  • 尝试使用 Paramiko 通过 SSH 连接到新的 EC2 实例时出现问题

    我正在编写一个脚本 该脚本使用 boto 启动一个新的 EC2 实例 并使用 Paramiko SSH 客户端在该实例上执行远程命令 无论出于何种原因 Paramiko 客户端无法连接 我收到错误 Traceback most recent
  • 带约束的简单线性回归

    我开发了一种算法来循环 15 个变量并为每个变量生成一个简单的 OLS 然后算法再循环 11 次以产生相同的 15 个 OLS 回归 但 X 变量的滞后每次增加 1 我选择具有最高 r 2 的自变量 并使用 3 4 或 5 个变量的最佳滞后
  • Django:503 服务不可用

    Related 我对 Python 及其框架完全陌生 在学习了一些 Python 基础知识后 我只是尝试一下 Django Problem 现在我正在尝试在第一次安装后运行 Django 服务器 服务器运行没有任何错误 但是当我尝试访问该网
  • Python 是否有相当于 R 的sample() 函数?

    我想知道Python是否有相当于sample R 中的函数 The sample https stat ethz ch R manual R devel library base html sample html函数使用带替换或不带替换的方
  • 导入不起作用

    我有两个文件说a py and b py 在 a py 中 我们的确是 import xxx from b import 在 b py 中我们有一个函数需要module xxx 现在当函数在b py被调用自a py它找不到模块xxx 为什么
  • 在 matplotlib 中使用轴绘制带有子点的图形时出现错误

    我尝试使用下面的代码绘制子图 但是我得到了 AttributeError numpy ndarray object has no attribute boxplot 但改变plt subplots 1 2 它正在用indexerror绘制箱

随机推荐