栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何将双指针ctype转换为numpy数组?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何将双指针ctype转换为numpy数组?

注意 :这是SO的后续工作:如何将2d数组从Python传递到C?。

一种方法是经过以下状态:

  1. CTypes 指针
  2. Python 清单
  3. NumPy 数组

自动出现2个观察结果:

  • 这是非常低效的,但是不幸的是我不知道如何摆脱 #2。 (这是元凶)
  • 指针保存有关基本类型的信息,但不包含有关从其创建的数组的维的信息,因此您必须“保存”它们,因为“解构”指针时将需要它们。

pre00.py

#!/usr/bin/env python3import sysimport ctypes as ctimport numpy as npdef main():    dim0 = 3    dim1 = 4    arr0 = np.empty([dim0, dim1], dtype=np.uint8)    print("Initial array:n{0:}".format(arr0))    UI8Ptr = ct.POINTER(ct.c_uint8)    UI8PtrPtr = ct.POINTER(UI8Ptr)    ct_arr = np.ctypeslib.as_ctypes(arr0)    UI8PtrArr = UI8Ptr * ct_arr._length_    ct_ptr = ct.cast(UI8PtrArr(*(ct.cast(row, UI8Ptr) for row in ct_arr)), UI8PtrPtr)    arr1 = np.array([[ct_ptr[i][j] for j in range(dim1)] for i in range(dim0)], dtype=ct_ptr._type_._type_._type_)    print("nFinal array:n{0:}".format(arr1))    print("nEqual arrays: {0:}".format(np.array_equal(arr0, arr1)))if __name__ == "__main__":    print("Python {0:s} {1:d}bit on {2:s}n".format(" ".join(item.strip() for item in sys.version.split("n")), 64 if sys.maxsize > 0x100000000 else 32, sys.platform))    main()    print("nDone.")

输出

[cfati@CFATI-5510-0:e:WorkDevStackOverflowq058781199]>

“e:WorkDevVEnvspy_064_03.07.03_test0scriptspython.exe” pre00.py
Python 3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 22:22:05) [MSC v.1916 64
bit (AMD64)] 64bit on win32

Initial array:[[ 96 100 101 115] [105 114 101 100] [ 96  96  32 115]]Final array:[[ 96 100 101 115] [105 114 101 100] [ 96  96  32 115]]Equal arrays: TrueDone.


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/645597.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号