将 cython cdef 扩展数组设置为零

2024-01-30

有没有一种 cython-ic 方式来设置cdef数组归零。我有一个具有以下签名的函数:

cdef cget_values(double[:] cpc_x, double[:] cpc_y):

该函数的调用方式如下:

cdef double cpc_x [16]
cdef double cpc_y [16]
cget_values(cpc_x, cpc_y)

现在我想做的第一件事是将这些数组中的所有内容设置为零。目前,我正在使用 for 循环来做到这一点:

for i in range(16):
    cpc_x[i] = 0.0
    cpc_y[i] = 0.0

我想知道这是否是一个合理的方法,没有太多的开销。我经常调用这个函数,想知道在 cython 中是否有更优雅/更快的方法来执行此操作。


我假设您已经在使用@cython.boundscheck(False),因此您无法采取太多措施来提高其性能。

出于可读性的原因,我会使用:

cpc_x[:]=0.0
cpc_y[:]=0.0

cython 会将其翻译为for-循环。另一个额外的优势:即使@cython.boundscheck(False)不使用,生成的 C 代码将仍然没有边界检查(__Pyx_RaiseBufferIndexError)。这是生成的代码a[:]=0.0:

  {
      double __pyx_temp_scalar = 0.0;
      {
          Py_ssize_t __pyx_temp_extent_0 = __pyx_v_a.shape[0];
          Py_ssize_t __pyx_temp_stride_0 = __pyx_v_a.strides[0];
          char *__pyx_temp_pointer_0;
          Py_ssize_t __pyx_temp_idx_0;
          __pyx_temp_pointer_0 = __pyx_v_a.data;
          for (__pyx_temp_idx_0 = 0; __pyx_temp_idx_0 < __pyx_temp_extent_0; __pyx_temp_idx_0++) {
            *((double *) __pyx_temp_pointer_0) = __pyx_temp_scalar;
            __pyx_temp_pointer_0 += __pyx_temp_stride_0;
          }
      }
  }

可以提高性能的方法是将内存视图声明为连续的(即double[::1]代替double[:]。生成的 C 代码为a[:]=0.0那么将是:

  {
      double __pyx_temp_scalar = 0.0;
      {
          Py_ssize_t __pyx_temp_extent = __pyx_v_a.shape[0];
          Py_ssize_t __pyx_temp_idx;
          double *__pyx_temp_pointer = (double *) __pyx_v_a.data;
          for (__pyx_temp_idx = 0; __pyx_temp_idx < __pyx_temp_extent; __pyx_temp_idx++) {
            *((double *) __pyx_temp_pointer) = __pyx_temp_scalar;
            __pyx_temp_pointer += 1;
          }
      }
  }

正如人们所看到的,strides[0]连续版本中不再使用 -strides[0]=1在编译期间进行评估,并且可以更好地优化生成的 C 代码(参见示例here https://stackoverflow.com/q/49058949/5769463).


人们可能会想要变得聪明并使用低级的memset-功能:

from libc.string cimport memset
memset(&cpc_x[0], 0, 16*sizeof(double))

然而,对于更大的数组,与连续内存视图的使用相比没有区别(即double[::1], see here https://stackoverflow.com/a/48276340/5769463例如)。对于较小的尺寸,开销可能会更少,但我从来没有足够关心去检查。

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

将 cython cdef 扩展数组设置为零 的相关文章

  • 在Python中,如何将矩阵逆时针旋转90度?

    gt gt gt def rotate matrix k List List int For example if I have m 1 2 3 2 3 3 5 4 3 rotate matrix m should give me 3 3
  • scipy.optimize on pandas dataframe

    我试图搜索它 但结果很差 有人可以向我解释一下如何在 Pandas DataFrame 上执行 optimize minimize 以便最小化 DataFrame 中的类别和结果列之间的错误 考虑这个例子 import pandas as
  • 键入的完整命令行

    我想获得输入时的完整命令行 This join sys argv 在这里不起作用 删除双引号 另外 我不想重新加入已解析和拆分的内容 有任何想法吗 你太迟了 当键入的命令到达 Python 时 您的 shell 已经发挥了它的魔力 例如 引
  • 类型错误:“datetime.datetime”和“str”的实例之间不支持“>”

    我是 python 日期和时间类型的新手 我有一个日期值 date 2018 11 10 10 55 31 00 00 我需要检查该日期值是否超过 90 天 我试过 from datetime import datetime from da
  • 如何在Windows中的Python 3.9下pip安装pickle?

    我需要pickle https docs python org 3 9 library pickle html module pickle包安装在我的下面Python 3 9在 Windows 10 下 我尝试过的 当尝试与pip inst
  • 查找正在导入哪些 python 模块

    从应用程序中使用的特定包中查找所有 python 模块的简单方法是什么 sys modules是将模块名称映射到模块的字典 您可以检查其键以查看导入的模块 See http docs python org library sys html
  • App Engine NDB:如何访问属性的 verbose_name

    假设我有这个代码 class A ndb Model prop ndb StringProperty verbose name Something m A m prop a string value 当然 现在如果我打印 m prop 它会
  • 在linux上安装python ssl模块,无需重新编译

    是否可以在已经安装了 OpenSSL 的 Linux 机器上安装 python 的 SSL 模块 而无需重新编译 python 我希望它就像复制几个文件并将它们包含在库路径中一样简单 Python版本是2 4 3 谢谢 是否可以在已经安装了
  • Python - Unicode 到 ASCII 的转换

    我无法在不丢失数据的情况下将以下 Unicode 转换为 ASCII u ABRA xc3O JOS xc9 I tried encode and decode他们不会这么做 有人有建议吗 Unicode 字符u xce0 and u xc
  • Py2exe - Pmw WindowsError:[错误 3]

    我正在尝试使用 Py2exe 构建独立的可执行文件 我已经导入了 Pmw 类 当我运行独立可执行文件时 出现以下错误 Traceback most recent call last File py line 9 in
  • Python-验证我的文档 xls 中是否存在工作表

    我正在尝试在空闲时间设计一个小程序 加载 xls 文件 然后在要扫描的文档中选择一张纸 步骤1 用户导入 xls文件 导入程序后检查文件是否存在 我能做到的 第 2 步 我要求用户提供要分析的文档表 xls 的名称 这就是它停止的地方 该程
  • Python:在字典中查找具有唯一值的键?

    我收到一个字典作为输入 并且想要返回一个键列表 其中字典值在该字典的范围内是唯一的 我将用一个例子来澄清 假设我的输入是字典 a 构造如下 a dict a cat 1 a fish 1 a dog 2 lt unique a bat 3
  • 无法使用 python rasterio、gdal 打开 jp2 (来自哨兵)

    我试图在 python 中将 jp2 栅格产品作为栅格打开 但当我们使用 raterio 和 gdal 包时没有成功 我收到此错误 RasterioIOError b4 jp2 not recognized as a supported f
  • 无法导入QUERY_TERMS

    我正在运行一个网站Python and Django Django filters 2 1 installed Django 2 1 installed 当我运行时 我收到以下错误 importError Could not import
  • Django 将 JSON 数据传递给静态 getJSON/Javascript

    我正在尝试从 models py 中获取数据并将其序列化为views py 中的 JSON 对象 模型 py class Platform models Model platformtype models CharField max len
  • 使用 MPI 的 Allreduce 对 Python 对象求和

    我正在使用使用 Python 中的字典和计数器构建的稀疏张量数组操作 我想让并行使用这个数组操作成为可能 最重要的是 我最终在每个节点上都有计数器 我想使用 MPI Allreduce 或另一个不错的解决方案 将其添加在一起 例如 使用计数
  • 使用 pandas 单元格中列表的长度选择行[重复]

    这个问题在这里已经有答案了 我有一张表 df a b c 1 x y x 2 x z c d 3 x t e f g 只是想知道如何使用 c 列的长度选择行 such as df loc len df c gt 1 我知道这是不对的 正确的
  • MoviePY 无法在 Windows 上检测 ImageMagick 二进制文件

    我刚买了一台新笔记本电脑 想要设置MoviePY在那新的Windows 64x Python3 7 0 机器 我对所有内容都进行了三次检查 但是当涉及到我的代码的文本部分时 它向我抛出了这个错误 OSError MoviePy Error
  • 如何同时接受int和float类型的输入?

    我正在制作一个货币转换器 如何让 python 同时接受整数和浮点数 我就是这样做的 def aud brl amount From to ER 0 42108 if amount int if From strip aud and to
  • Biopython 可以执行 Seq.find() 来解释歧义代码吗

    我希望能够在 Seq 对象中搜索考虑歧义代码的子序列 Seq 对象 例如 以下内容应该是正确的 from Bio Seq import Seq from Bio Alphabet IUPAC import IUPACAmbiguousDNA

随机推荐

  • Solr:多语言索引和多值字段的 DIH?

    我有一个 MySQL 表 CREATE TABLE documents id INT NOT NULL AUTO INCREMENT language code CHAR 2 tags CHAR 30 text TEXT PRIMARY K
  • WebDriverException:未知错误:Runtime.executionContextCreated 具有无效的“上下文”:初始化 Chrome 浏览器时

    我正在尝试开始使用 selenium 并下载了 chrome 驱动程序并将其放入我的类路径中 我现在只是想获得标题 看看是否可以让它发挥作用 目前代码如下所示 import org openqa selenium WebDriver imp
  • 动态模块什么时候会出现类型加载异常?

    我有一个动态模块 当我的应用程序运行时 它会添加类型 该模块是通过以下代码创建的 var assemblyName new AssemblyName MyAssembly var assemblyBuilder AppDomain Curr
  • 如何在 check 子句中使用 CURDATE()?

    我尝试创建一个表 其中 dateFrom 和 dateTo 字段需要高于今天的日期 所以我这样使用 CHECK CREATE TABLE Booking hotelNo int 10 guestNo int 10 dateFrom date
  • Python,使用多处理进一步加速 cython 函数

    此处显示的代码经过简化 但会触发相同的 PicklingError 我知道关于什么可以腌制和什么不能腌制有很多讨论 但我确实从他们那里找到了解决方案 我编写了一个简单的 cython 脚本 具有以下功能 def pow2 int a ret
  • 如何在xlwings中选择整个工作表

    我在用xlwings 我想复制整个wb1 sheets 1 并粘贴到wb sheets 1 A4细胞 目前我必须设置一个非常大的单元格Z100000 有没有通用的方法来选择整个工作表而不是不安全区域A1 Z10000 import xlwi
  • 使用 AES256 和 Node.js 解密长度超过 15 个字符的输入数据时出错

    我正在使用 Node js 的加密模块和 AES 256 CBC 密码算法编写自己的安全类 但是 当我尝试解密从长度超过 15 个字符的输入数据加密的加密字符串时 失败并出现以下错误 crypto js 153 var ret this h
  • 了解自制程序和仅小桶的依赖关系

    我最近开始使用自制软件 我对当我在我的系统上酿造某些东西时会发生什么感到有点困惑 但它的酿造依赖项是仅桶的 这意味着它们链接在 usr local 例如 我正在安装vips 图像处理库 它的众多依赖项之一是 pixman Pixman 仅作
  • 流程图 x 轴时间问题... AARGHHH

    我很难将数据显示在以 x 轴作为时间线的流程图中 这是我的 JSON 文件的缩写副本 label ServiceReport data 1328983200 53 1328986800 53 1328990400 60 我已按照 Flot
  • Vue 路由器可以在开发服务器上运行,但不能在 vercel vite 上运行

    我正在使用 vite 制作一个项目 该项目使用 vue router 4 它工作得很好 但是当查看 vercel 或 netlify 上的链接时 我收到 404 错误 这是我的 index js 文件 路由器设置 import create
  • group_by 返回重复的键

    Python 3 6 我有一个简单的对象列表 for obj in obj ts print obj address 这告诉我 mwpJCSEEkphA1utQGA2Y9Vx8cufv85CgpR mwpJCSEEkphA1utQGA2Y9
  • JFreeChart:如何使系列不可见?

    我正在尝试使 ohlc 柱形图不可见 以便我可以仅保留移动平均线的窗口 这是两个系列 ohlc 柱和移动平均线 的代码 private static JFreeChart createChart OHLCDataset dataset JF
  • 不同的背景图像和左面板错误

    我使用的是 jQuery mobile 1 4 如果单击左侧面板 我的背景就会消失 我在奥马尔的帮助下解决了这个错误 非常感谢 Aim 主页应该有深色背景 所有其他页面应该有浅色背景 问题一 如果我单击主页上的面板 它就会起作用 如果我转到
  • 如何在React中使用animejs?

    我已经从 npm 安装了animejs 并导入了所需的文件 但是当在我的代码中添加anime code 时 它无法正常工作并显示错误 这是我所做的一个小例子 import React from react import anime from
  • Python message.content 不和谐机器人

    我正在努力让我的discord py当有人发送一些单词时 机器人会自动响应 但问题是该命令仅在该单词是句子中首先写入的情况下才有效 我希望我的机器人能够响应该消息 即使该单词位于某个句子的中间 如果这是可能的 我该怎么做 以下示例将执行您想
  • iOS 支持哪些字体格式?

    我想知道iOS支持哪些字体格式 我已经知道iOS支持TTF格式 它是否支持任何其他功能 例如 PFM 或 PMB 从 iOS 7 开始 支持 TTF 和 OTF 字体格式 您可以在应用程序中或通过配置文件分发这些字体 以使它们在系统范围内可
  • 如何将 boost::bind 与不可复制的参数一起使用,例如 boost::promise?

    某些 C 对象没有复制构造函数 但有移动构造函数 例如 boost promise 如何使用它们的移动构造函数绑定这些对象 include
  • 大地图寻路

    我正在创建一个带有 10 000 x 10 000 地图的游戏 我希望用户能够设置位置并让计算机立即找到最佳路径 然而 由于地图是10 000 x 10 000 有100 000 000个节点 并且通过诸如A 或Dijkstra之类的传统方
  • SQL GROUP_CONCAT 拆分为不同的列

    我进行了很多搜索 但没有找到解决我的问题的正确方法 我想做什么 我在 MySQL 中有 2 个表 国家 货币 我通过 CountryCurrency 将它们加入到一起 gt 由于多对多的关系 请参阅此示例 http sqlfiddle co
  • 将 cython cdef 扩展数组设置为零

    有没有一种 cython ic 方式来设置cdef数组归零 我有一个具有以下签名的函数 cdef cget values double cpc x double cpc y 该函数的调用方式如下 cdef double cpc x 16 c