嘿,我得到了我用来将numpy 2d数组转换为ctype双指针的代码。
import ctypes as ct
import numpy as np
arr = np.empty([500, 500], dtype=np.uint8)
UI8Ptr = ct.POINTER(ct.c_uint8)
UI8PtrPtr = ct.POINTER(UI8Ptr)
ct_arr = np.ctypeslib.as_ctypes(arr)
UI8PtrArr = UI8Ptr * ct_arr._length_
ct_ptr = ct.cast(UI8PtrArr(*(ct.cast(row, UI8Ptr) for row in ct_arr)), UI8PtrPtr)
如何将ct_ptr转换回numpy 2d数组?
注意 :这是SO的后续工作:如何将2d数组从Python传递到C?。
一种方法是经过以下状态:
自动出现2个观察结果:
code00.py :
#!/usr/bin/env python3
import sys
import ctypes as ct
import numpy as np
def 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:\Work\Dev\StackOverflow\q058781199]>
“e:\Work\Dev\VEnvs\py_064_03.07.03_test0\Scripts\python.exe” code00.py
Python 3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 22:22:05) [MSC v.1916 64
bit (AMD64)] 64bit on win32Initial 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: True Done.
问题内容: 我有一个使用ctypes调用Python的C++回调函数。该函数的参数是一个指向double和元素数量数组的指针。 元素很多,大约2,000,000。我需要将此发送到scipy函数。 C ++原型是: 以下是python代码: 问题是打印数据列表返回: 这是不正确的(在c ++端检查时,数据中填充了许多其他数字。 另外,如果我使用此代码将数据转换为python列表,则会在分配步骤中锁定
问题内容: 我在与要转换为numpy数组的视频相同的文件夹中有一个python脚本。我的视频称为“ test.mp4”。 在我的脚本中,我想调用并返回一个numpy数组。所得的numpy数组应为图像的numpy数组,其中每个图像均为3-d numpy数组。 那有意义吗? 谢谢! 问题答案: 下面的脚本可以满足您的需求。您可以将它的一部分分成函数。 下面的代码不检查错误,特别是生产代码将检查每个变量
问题内容: 假设我有; 我尝试转换; 我现在正在vstack上通过迭代来解决它,但是对于特别大的LIST来说确实很慢 您对最佳有效方法有何建议? 问题答案: 通常,您可以沿任意轴连接整个数组序列: 但你 也 必须对列表中的形状和每个阵列的维度担心(用于2维3x5的输出,你需要确保它们都是2维正由-5阵列的话)。如果要将一维数组连接为二维输出的行,则需要扩展其维数。 正如Jorge的答案所指出的那样
问题内容: 我有一个RGB图像。我想将其转换为numpy数组。我做了以下 它创建一个没有形状的数组。我假设它是一个iplimage对象。 问题答案: 您可以使用较新的OpenCV python接口(如果我没记错的话,自OpenCV 2.2起就可以使用)。它本机使用numpy数组: 结果:
问题内容: 的在系统调用 包在Golang返回类型,而底层系统调用实际上返回一个指针。它是如何做到的? 更具体地说,在Golang开发人员的此程序包中,该函数仅返回一个指针。如何将其转换为字节片,就像在Unix软件包中一样? 问题答案: 使用该包,您可以在未导出类型的Mmap方法中执行相同的操作: 这是一个操场的例子。
问题内容: 好吧,我想将PIL图像对象来回转换为numpy数组,因此我可以实现比对象所允许的更快的逐像素转换。我想出了如何通过以下方式将像素信息放置在有用的3D numpy数组中: 但是,在完成所有出色的转换之后,我似乎无法弄清楚如何将其重新加载到PIL对象中。我知道该方法,但似乎无法使其正常工作。 问题答案: 你并不是在说行为不正确。我假设你在做 这是因为需要一个元组序列,并且你要给它一个num
问题内容: 我想将图像转换为NumPy数组再转换为PySide QPixmap,因此可以显示它(在PySide UI中编辑:)。我已经找到了此工具:qimage2ndarray,但它仅适用于PyQt4。我试图对其进行更改以使其能够与PySide一起使用,但是我将不得不更改该工具的C部分,并且我没有使用C的经验。我该怎么做?或者有其他选择吗? 问题答案: 一种选择是仅使用PIL库。 您可以在http
问题内容: 注意: 这要求与通常的元组到数组的转换相反。 我必须将一个参数传递给(包装的c ++)函数作为嵌套元组。例如,以下作品 而以下 不 不幸的是,我想使用的参数是一个numpy数组。对于某些N,该阵列的尺寸始终为2xN,这可能会很大。 有没有简单的方法可以将其转换为元组?我知道我可以循环遍历,创建一个新的元组,但是如果numpy数组提供了一些不错的访问权限,我会更喜欢。 如果不可能如我所愿