簡體   English   中英

在 Julia 中重新解釋指針

[英]Reinterpreting Pointers in Julia

我有一些具有現有 python 綁定的 C++ 代碼,我正在嘗試使用 PyCall 將它移植到 Julia。 被調用的函數之一在內存中生成一個指向二維數組的指針,我想將 Julia 數組包裝到該數組中,以便我可以添加/減去/乘以標量等。我知道數組的大小,並且它目前表示為一個 PyObject,我可以對其執行x_ptr[1]x_ptr[2]並獲得正確的值。 但我想要一個數組x

這是一個使用 numpy array interface的簡單示例。 默認情況下,PyCall 將 numpy 數組轉換為 Julia 的數組,但我們可以使用@pycall::Any注釋來防止這種情況@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 對象才能自己找到該指針。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM