cython优化代码过程问题及解决总结

2023-11-04

1、同样cdef的矩阵还是在Python平台(还是黄色):

源:

 

问题:

 

解决1),2),3)

1)加上修饰符:@cython.boundscheck(False)

 @cython.wraparound(False)

 

2)数组索引方式

 

注意这里nodePot0是二维,所以nodePot0[i]是一维数组,因而也是黄色:

3)每个函数前面都要修饰符

@cython.boundscheck(False)

 @cython.wraparound(False)

  

2、%和/也有黄色——@cython.cdivision(True)

解决:在函数或类前面加函数修饰@cython.cdivision(True)(每个函数和类前面都要加)

 

 

3、cmd命令编译python setup.py build_ext --inplace出现问题:

error c1083 :cannot open include file :numpy/arrayobject.h:No such file or directory

解决:在setup.py文件加include_dirs=[numpy.get_include()]

https://stackoverflow.com/questions/14657375/cython-fatal-error-numpy-arrayobject-h-no-such-file-or-directory

 

4、cdef的函数出现错误:module‘xxxx’ has no attribute ‘xxx’

实验例子:E:\PycharmProjects\cython_hello

将hello.pyx文件中函数的def改成cdef,再生成pyd文件,通过

import hello

hello.say_hello_to(“cython”)

调用出现问题:AttributeError: module 'hello' has no attribute 'say_hello_to'

原因:python程序中看不到cdef函数,python只能直接调用def的函数,cdef的函数只能通过Python调用def的函数来调用

解决:把和Python接口的函数用def写

 

5、参数类型传递问题ValueError: Buffer dtype mismatch, expected 'float' but got 'double'

传的python参数是float64的,将pyx中的float和double都改成np.float_64型

类似问题:cdef np.ndarray[int,ndim=1] a=np.zeros((4))提示expected‘int’ but got ‘double’因为np.zeros默认生成float64类型

解决:改成对应类型即可。改成cdef np.ndarray[int,ndim=1] a=np.zeros((4),dtype=int)

 

6、cmd运行语句python setup.py build_ext --inplace时错误:

 

原因:还处于调试状态,结束调试再运行就没问题了

 

Ps:Python传给cython的参数值会随其在函数中的改变而改变

 ===========================================================================

具体文献代码问题

7、map,rectangle=EFM.distance_map(img)求出来map和rectangle都是0:

挨个函数想办法看各个关键变量是否求对:labeled_map,inte_hist是对的

将distance_ma()函数语句放到命令行单步调试:发现saliency_at_position()函数输出错误,将此函数语句放到命令行单步调试:chi_square_distance()函数求的所有distance都是0,但是将此函数语句放到命令行单步调试结果又是对的,于是在pyx文件的chi_square_distance()函数中用print()输出关键变量,发现每个vectorA/sum_A都是0

问题所在:vectorA和sum_A都是int型变量,相除之后结果是int型

解决:将sum_A定义为np.float64_t型

 

8、没有错误提示后运行出现弹窗“python停止工作”,关闭弹窗后,命令窗口:python process finished with exit code -1073741819 (0xC0000005)

通过代码增、减反复操作,先找到是while循环中出现问题,进一步排查发现是语句:e=edgeNum(nbrs[j],i,starV,starE)的问题

回到用python写的BP_salient_map中调试,发现是矩阵starV, starE索引溢出

输出cython写的bp.pyx中的starV, starE在进行循环减1前后的最大最小值

 

发现starV的最大值多了1,对比C语言写的BP_General_C中,发现for循环中是<=:

因此改为:

 

由此解决了一直以来的有时候能正确运行,有时候又出现python停止运行的问题

 

9、显著图显示结果有错误

1)先把BP_General_C.c中DEBUG改为1,即调试模式,看看各个变量的值,修改BP_General_C.c后,需要重新用MATLAB生成BP_General_C.mexw64文件

在MATLAB命令行输入:mex -setup   

选择语言:

把BP_General_C.c文件放在MATLAB当前文件夹编译:

每次修改了BP_General_C.c都要重新编译

2)c语言printf时,输出格式用错,输出值也会错,例如double类型用了%d格式就会错

3)BP_General_C.c中用数值索引取nodePot和edgePot的值:

 

一开始在bp.pyx中将nodePot reshape成一维,也用同样句式赋值,但是两边输出的prod_of_msgs和old_bel结果不一样,将bp.pyx中修改,nodePot保持二维,用以下句式赋值,得到的赋值后结果一样:

 

后面while中也一样,保持nodePot和edgePot原来的维度,直接用矩阵坐标索引

还有一个类似的索引错误就是得到nodeBel的地方,输出发现new_bel其实就可以作为输出,但赋值给原本输出nodeBel时就乱了,之前是:

将nodeBel改成二维,这样复制,输出结果经过reshape就对了:

 

当然bp.pyx可以直接输出new_bel

 

11、 

RuntimeWarning:invalid value encountered in double_scalars

RuntimeWarning:invalid value encountered in true_divide

RuntimeWarning:invalid valueencountered in det

RuntimeWarning:invalid valueencountered in less

 

 

症结所在是输入gaussPDF()函数的sigma[:,:,i]参数,sigma[:,:,i]出现了奇异矩阵

解决:sigma[:,:,i]每次进入gaussPDF之前先在对角线加上一个小值:

 

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

cython优化代码过程问题及解决总结 的相关文章

随机推荐

  • Visio+Latex 插入EPS等矢量图

    Latex插入单栏 或者跨栏 的图片 在figure后面加个 即可 即figure begin figure h centering includegraphics width linewidth Figure1 caption Whate
  • CentOS 7通过samba实现与Windows共享文件夹

    Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件 由服务器及客户端程序构成 SMB Server Messages Block 信息服务块 是一种在局域网上共享文件和打印机的一种通信协议 它为局域网内的不同计算机之间提供
  • 【数据结构与算法——TypeScript】树结构Tree

    数据结构与算法 TypeScript 树结构 Tree 认识树结构以及特性 什么是树 真实的树 相信每个人对现实生活中的树都会非常熟悉 我们来看一下树有什么特点 树通常有一个根 连接着根的是树干 树干到上面之后会进行分叉成树枝 树枝还会分叉
  • OpenCV实现人脸识别

    该程序对头像很小的图片效果不是很好 VS2017 OpenCV3 5 主要步骤 1 读取图像 2 转为灰度图 3 直方图均衡化 增加对比度 4 载入分类器 5 检测关于脸部位置 include
  • 地形平滑算法

    地形平滑算法 2013 06 20 18 33 2486人阅读 评论 0 收藏 举报 分类 OGRE 41 C C 10 版权声明 本文为博主原创文章 未经博主允许不得转载 拉出来的地下不平滑怎么办 笨办法就是美工一个顶点一个顶点的调整 而
  • AWB实现流程

    简介 本篇谈论下对AWB算法的调查和预研工作 内容概述 所谓AWB也就是自动白平衡的意思 白平衡在相机中很常见 主要是和色温 色彩还原 色调调整相关 当白平衡设置不佳的时候 常会出现如下这些情况 在日光灯的房间里拍摄的影像会显得发绿 在室内
  • UE5项目打包发布Windows需要安装插件

    一 下图为UE5项目打包发布Windows的安装路劲 前面感叹号为未安装插件 二 打包前的其他可有可无设置 1 编辑Edit 项目设置Project Settings 2 平台Platforms Windows 三 安装路径 1 搜索vis
  • 群晖(docker图形化界面)使用 SpeedTest 测速

    群晖 docker图形化界面 使用 SpeedTest 测速 博主博客 https blog uso6 com https blog csdn net dxk539687357 本文主要介绍在群晖中安装 speedtest 进行网络测速 一
  • 会话跟踪技术:会话Cookie,URL重写和HttpSession

    一 会话跟踪 session tracking 技术 会话是客户端发送请求 服务器返回响应的连接时间段 HTTP是无状态协议 每次都是单独连接 不能维持客户的上下文信息 会话跟踪技术是用于维持客户端和服务器端通信信息的技术 三种典型客户端会
  • 云计算介绍之云计算存储(1)

    文章目录 云计算存储 1 存储架构 1 1存储概念 1 2系统组成 1 系统硬件 2 存储软件 3 存储方案 1 3存储分类 1 3 1 开放系统的存储 1 外挂存储 a Fabric Attached Storage 网络存储 FAS 1
  • TinyPerson数据集json文件改写为xml文件

    TinyPerson NWPU VHR 10或其他同理 数据集文件改写为VOC类型的xml文件 代码转python实现 创作不易 点个赞吧 文章目录 TinyPerson NWPU VHR 10或其他同理 数据集文件改写为VOC类型的xml
  • CentOS 6.3下rsync服务器的安装与配置

    一 rsync 简介 Rsync remote synchronize 是一个远程数据同步工具 可通过LAN WAN快速同步多台主机间的文件 也可以使用 Rsync 同步本地硬盘中的不同目录 Rsync 是用于取代rcp的一个工具 Rsyn
  • WINDOWS SERVER 2012证书服务安装配置

    WINDOWS SERVER 2012证书服务安装配置 首先需要下载一个windows server 2012的镜像 安装虚拟机 来进行证书服务安装之前的准备 在进行安装证书服务之前 首先应该安装配置域服务 否则安装证书服务无法正常安装配置
  • python好学吗?0基础学习python需要那些准备

    Python是一种计算机程序设计语言 你可能已经听说过很多种流行的编程语言 比如非常难学的C语言 非常流行的Java语言 适合初学者的Basic语言 适合网页编程的JavaScript语言等等 那Python是一种什么语言 首先 我们普及一
  • kubernetes1.20版本启用ipvs模式

    在1 19版本之前 kubeadm部署方式启用ipvs模式时 初始化配置文件需要添加以下内容 apiVersion kubeproxy config k8s io v1alpha1 kind KubeProxyConfiguration f
  • (css样式穿透详解)::v-deep的使用

    目录 背景 使用 1 当项目中使用的 css 原生样式 需要使用 gt gt gt 深度选择器来修改 外用第三方组件的样式 2 当项目中使用的 css 扩展语言是 less 需要使用 deep 或者 v deep 深度选择器来修改 外用第三
  • TypeScript超详细入门教程(上)

    TypeScript超详细入门教程 上 01 开篇词 Hello TypeScript 01 开篇词 Hello TypeScript 更新时间 2019 10 30 13 49 46 既然我已经踏上这条道路 那么 任何东西都不应妨碍我沿着
  • ios申请真机调试( xcode 5)详细解析

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 已经有开发证书的直接跳过第一步 第一步 申请 开发证书 进入苹果开发者99美元账号 选择 Certificates Identifiers Profiles 关于 Cert
  • BTC-协议

    防范 double spending attack Distribute consensus distributed hash table 分布式共识 FLP impossibility result 在一个异步的系统里 网络时延没有上限
  • cython优化代码过程问题及解决总结

    1 同样cdef的矩阵还是在Python平台 还是黄色 源 问题 解决1 2 3 1 加上修饰符 cython boundscheck False cython wraparound False 2 数组索引方式 注意这里nodePot0是