python通过ctypes传参numpy给c语言函数

这篇具有很好参考价值的文章主要介绍了python通过ctypes传参numpy给c语言函数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

//demo.c
#include <stdio.h>
#include <stdlib.h>

void fn2(void *p,void *o,int length)
{   
    u_char *p_new = (u_char *)p;
    u_char *o_new =(u_char *)o;
    for (int i=0;i<length;i++)
    {
        u_char data = p_new[i];//*(u_char *)p++;
        o_new[i]=data+100;
    }
}

gcc -o demo.so -std=c++11 -shared -fPIC demo.c

//main.py
import ctypes as ct
import time

def test_demo2():
    m = np.arange(10,dtype=np.uint8)
    print("Origin input:",m)
    so = ct.cdll.LoadLibrary("./demo.so")
    p = m.ctypes.data_as(ct.POINTER(ct.c_void_p))
    out_array = np.empty(m.shape,dtype=np.uint8)
    print("Origin output:",out_array)
    q = out_array.ctypes.data_as(ct.POINTER(ct.c_void_p))
    so.fn2(p,q, len(m))
    print("=================================")
    print("Output Result:",out_array)



if __name__ == '__main__':
    test_demo2()

 python3 main.py

Origin input: [0 1 2 3 4 5 6 7 8 9]
Origin output: [  0 141  43 235  57 127   0   0   0 141]
=================================
Output Result: [100 101 102 103 104 105 106 107 108 109]

概述:

示例实现了numpy数组加上100并通过另外的数组的指针获取返回值。主要过程是

numpy数组转换成c_void_p类型,然后传参给c语言函数,c语言函数中指针强转到需要的数据类型,然后再处理。这样即可改变numpy数组中的数值实现各种计算。

该方法可以实现python一些算子的速度优化(有无因患要后续确认)文章来源地址https://www.toymoban.com/news/detail-651602.html

到了这里,关于python通过ctypes传参numpy给c语言函数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • c语言中为什么函数传参大多数用指针类型

    在C语言中,函数传参大多数使用指针类型的原因主要有两个: 允许在函数内部修改实参的值:C语言中的函数参数传递是按值传递的,即将实参值拷贝一份到形参中进行操作,对参的修改不会影响实参。而通过使用指类型参数,可以将实参的地址传递给函数,从而在函数内部

    2024年02月09日
    浏览(49)
  • R语言【技巧】——判断自定义函数的传参内容是否符合要求

    比如 对一个应该传入 数值型 ,数值为 0 或 1 的参数: 比如 对一个应该传入 字符型 ,字符串为 某个向量元素之一 的参数,类似于选项框:

    2024年01月23日
    浏览(46)
  • 【Python 零基础入门】Numpy 常用函数 通用函数 & 保存加载

    Numpy (Numerical Python) 是 Python 编程语言的一个扩展程序库, 支持大量的维度数组与矩阵运算, 并提供了大量的数学函数库. Numpy 利用了多线程数组来存储和处理大型数据集, 从而提供了一个高效的方式来进行数值计算, 特别是对于矩阵预算和线性代数. 通用函数 (Ufuncs) 是 numpy 的核

    2024年02月05日
    浏览(65)
  • C 语言的 ctype.h 头文件

    C 语言的 ctype.h 头文件包含了很多字符函数的函数原型, 可以专门用来处理一个字符, 这些函数都以一个字符作为实参. ctype.h 中的字符测试函数如表所示: 这些测试函数返回 0 或 1, 即 false 或 true. ctype.h 中的字符映射函数如表所示: 字符测试函数不会修改原始实参, 只会返回已经

    2024年02月12日
    浏览(37)
  • Python学习(2)-NumPy矩阵与通用函数

    文章首发于:My Blog 欢迎大佬们前来逛逛 data:表示输入的 数组 或者 字符串 ,使用‘,’分割列,使用‘;’分割行 创建两个普通的矩阵: 需要注意:mat创建的矩阵是不会产生副本的,即 共享内存 : matrix也是创建矩阵的: data:数组或者字符串,与mat一样 copy:表示创建

    2024年03月25日
    浏览(32)
  • Python numpy中random函数的使用

    np.random:随机数的生成 np.random.random() np.random.random(size) np.random.random([m,n])或np.random.random((m,n)) np.random.rand(m,n) 与np.random.random((m,n))作用一样,但是参数形式不同。 np.random.randint(a,b,size) np.random.uniform(a,b,size) np.random.normal():均值为0,标准差为1【无参默认值】 np.random.normal(a,b) n

    2023年04月08日
    浏览(36)
  • python main 函数-启动-传递参数 python 打包 exe C# 进程传参

    在Python编程中,我们经常需要从命令行或其他外部环境中获取参数。Python提供了一种简单而灵活的方式来处理这些参数,即通过main函数传参 1.python main 函数-启动-传递参数 test.py 2. 如果直接传参给 脚本 输出:  输入 aa bb cc cc pyinstaller是一个流行的Python打包工具,它可以将P

    2024年02月09日
    浏览(41)
  • Python Numpy 关于 linspace()函数 使用详解(全)

    用plt画图的时候,偶尔会看到这个函数的出现,索性直接深入源码实战进行复现 主要功能 :在线性区域中生成等间距的序列,原先在Numpy中可以用 numpy.arange() ,但对于浮点数会有精度丢失,因此 linspace() 对于浮点数比较友好。适当的参数,两者都可选择。 具体源码: numpy

    2024年02月05日
    浏览(49)
  • c语言学习之——<ctype.h>库的介绍

    写这篇文章的起因是在练习算法的过程中遇到了isalnum()函数,而自己又对此很陌生。查资料的时候又发现此函数涉及到c的一个标准库,干脆直接对库进行一个总结。以下正文为总结内容。 目录  一、简介 二、库函数 1、isalnum()函数 2、isalpha()函数 3、isdigit()函数 4、islower()函

    2024年02月03日
    浏览(52)
  • 【Python 零基础入门】Numpy 常用函数 数组操作 & 数学运算

    Numpy (Numerical Python) 是 Python 编程语言的一个扩展程序库, 支持大量的维度数组与矩阵运算, 并提供了大量的数学函数库. Numpy 利用了多线程数组来存储和处理大型数据集, 从而提供了一个高效的方式来进行数值计算, 特别是对于矩阵预算和线性代数. np.assarray 可以将输入转换为

    2024年02月05日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包