2024-10-03 13:29:59 发布
网友
我有一些C++代码,它有现有的Python绑定,我想用pyLeCK移植到朱丽亚上。其中一个被调用的函数生成了一个指向内存中的2D数组的指针,我想把Julia数组包围起来,这样我就可以用标量加/减/乘等等。我知道数组的大小,它当前被表示为一个PyObject,我可以对它执行x_ptr[1],x_ptr[2]并获得正确的值。但是我想要一个数组,x。在
x_ptr[1]
x_ptr[2]
x
下面是一个使用numpy的简单示例。默认情况下,PyCall会将numpy数组转换为Julia的数组,但是我们可以通过@pycall和{}注释来防止这种情况的发生,以显示您如何手动执行该操作。你需要深入研究这个对象才能找到那个指针。在
@pycall
julia> obj = @pycall numpy.reshape(numpy.arange(20), (4,5))::Any PyObject array([[ 0, 1, 2, 3, 4], [ 5, 6, 7, 8, 9], [10, 11, 12, 13, 14], [15, 16, 17, 18, 19]]) julia> array_interface = obj[:__array_interface__] Dict{Any,Any} with 6 entries: "shape" => (4, 5) "strides" => nothing "typestr" => "<i8" "data" => (4705395216, false) "descr" => Tuple{String,String}[("", "<i8")] "version" => 3 julia> array_interface["data"] # This is the actual pointer! (4705395216, false) julia> unsafe_wrap(Matrix{Int}, Ptr{Int}(array_interface["data"][1]), reverse(array_interface["shape"])) 5×4 Array{Int64,2}: 0 5 10 15 1 6 11 16 2 7 12 17 3 8 13 18 4 9 14 19
当然,我不知道python对象如何存储它的指针。您必须自己深入Python对象才能找到该指针。在
下面是一个使用numpy的简单示例。默认情况下,PyCall会将numpy数组转换为Julia的数组,但是我们可以通过}注释来防止这种情况的发生,以显示您如何手动执行该操作。你需要深入研究这个对象才能找到那个指针。在
@pycall
和{当然,我不知道python对象如何存储它的指针。您必须自己深入Python对象才能找到该指针。在
相关问题 更多 >
编程相关推荐